diff --git a/src/main/java/org/mfusco/fromgoftolambda/examples/chainofresponsibility/ChainOfRespLambda.java b/src/main/java/org/mfusco/fromgoftolambda/examples/chainofresponsibility/ChainOfRespLambda.java index cd50cb0..4b252c2 100644 --- a/src/main/java/org/mfusco/fromgoftolambda/examples/chainofresponsibility/ChainOfRespLambda.java +++ b/src/main/java/org/mfusco/fromgoftolambda/examples/chainofresponsibility/ChainOfRespLambda.java @@ -7,27 +7,27 @@ public class ChainOfRespLambda { public static Optional parseText(File file) { - return Optional.ofNullable(file) - .filter(f -> f.getType() == File.Type.TEXT ) - .map(f -> "Text file: " + f.getContent()); + return file.getType() == File.Type.TEXT ? + Optional.of("Text file: " + file.getContent()) : + Optional.empty(); } public static Optional parsePresentation(File file) { - return Optional.ofNullable(file) - .filter(f -> f.getType() == File.Type.PRESENTATION ) - .map(f -> "Presentation file: " + f.getContent()); + return file.getType() == File.Type.PRESENTATION ? + Optional.of("Presentation file: " + file.getContent()) : + Optional.empty(); } public static Optional parseAudio(File file) { - return Optional.ofNullable(file) - .filter(f -> f.getType() == File.Type.AUDIO ) - .map(f -> "Audio file: " + f.getContent()); + return file.getType() == File.Type.AUDIO ? + Optional.of("Audio file: " + file.getContent()) : + Optional.empty(); } public static Optional parseVideo(File file) { - return Optional.ofNullable(file) - .filter(f -> f.getType() == File.Type.VIDEO ) - .map(f -> "Video file: " + f.getContent()); + return file.getType() == File.Type.VIDEO ? + Optional.of("Video file: " + file.getContent()) : + Optional.empty(); } public static void main( String[] args ) { @@ -40,8 +40,7 @@ public static void main( String[] args ) { ChainOfRespLambda::parseAudio, ChainOfRespLambda::parseVideo ) .map(f -> f.apply( file )) - .filter( Optional::isPresent ) - .map( Optional::get ) + .flatMap(o -> o.map(Stream::of).orElseGet(Stream::empty)) // jdk9: Optional#stream() .findFirst() .orElseThrow( () -> new RuntimeException( "Unknown file: " + file ) ) );