Grzegorz Piwowarek[email protected]
View Slide
GitHub, Twitter :: @pivovarit
GitHub, Twitter :: @pivovaritVISIONS OF TONDAL.PL
Why?
//TODO:-lambda expressions-java.util.function-monad-java.util.Optional-java.util.stream.StreamGitHub, Twitter :: @pivovarit
lambda expressionsGitHub, Twitter :: @pivovarit
lambda expressions(...) -> statement- Anonymous functionGitHub, Twitter :: @pivovarit
lambda expressionsx -> x + 1GitHub, Twitter :: @pivovarit
lambda expressionsx -> x + 1GitHub, Twitter :: @pivovarit() -> 42
lambda expressionsx -> x + 1GitHub, Twitter :: @pivovarit() -> 42() -> {return 42;}
lambda expressionsx -> x + 1GitHub, Twitter :: @pivovarit() -> 42(x, y) -> {}() -> {return 42;}
lambda expressionsx -> x + 1- No type informationGitHub, Twitter :: @pivovarit
method referencesGitHub, Twitter :: @pivovarit
java.util.functionGitHub, Twitter :: @pivovarit
Function, BiFunctionConsumer extends FunctionSupplier extends FunctionPredicate extends FunctionUnaryOperator extends FunctionBinaryOperator extends BiFunctionGitHub, Twitter :: @pivovarit
MONADGitHub, Twitter :: @pivovarit
GOOGLE IMAGES...
...GitHub, Twitter :: @pivovarit
MONADDesign patternhttp://got-steam.com/GitHub, Twitter :: @pivovarit
Why bother? :Boilerplate--Readability++Complexity--GitHub, Twitter :: @pivovarit
Imperative approachGitHub, Twitter :: @pivovarit
Declarative approachGitHub, Twitter :: @pivovarit
Generic type:"unit" method:"bind" method:MONADGitHub, Twitter :: @pivovarit
http://www.ivanaborovnjak.com/project/box-in-a-box/GitHub, Twitter :: @pivovarit
SolutionGitHub, Twitter :: @pivovarit
Monads in Java 8OptionalStreamCompletableFutureGitHub, Twitter :: @pivovarit
OptionalEncapsulation of operationson optional valuesGitHub, Twitter :: @pivovarit
Optionaltype:"unit":"bind":GitHub, Twitter :: @pivovarit
Optionaltype: Optional"unit":"bind":GitHub, Twitter :: @pivovarit
Optionaltype: Optional"unit": Optional.ofNullable(), Optional.of()"bind":GitHub, Twitter :: @pivovarit
Optionaltype: Optional"unit": Optional.ofNullable(), Optional.of()"bind": Optional.flatMap(), Optional.map()GitHub, Twitter :: @pivovarit
Filtering an Optional.filter(Predicate)GitHub, Twitter :: @pivovarit
Unwrapping an Optional.get().orElse(T default).orElseGet(Supplier).orElseThrow(Supplier).ifPresent(Consumer)GitHub, Twitter :: @pivovarit
GitHub, Twitter :: @pivovarithttp://theworryfreelife.com/wp-content/uploads/2015/08/comfort-zone.jpg
Java 7 styleGitHub, Twitter :: @pivovarit
Java 8 styleGitHub, Twitter :: @pivovarit
Java 7,5 style ;)GitHub, Twitter :: @pivovarit
StreamEncapsulation of operationson multiple itemsGitHub, Twitter :: @pivovarit
Streamtype: Stream"unit": Stream.of(), Arrays.stream(), Collection.stream()"bind": Stream.flatMap()GitHub, Twitter :: @pivovarit
StreamGitHub, Twitter :: @pivovarit
Imperative vs. DeclarativeGitHub, Twitter :: @pivovarit
Stream && OptionalGitHub, Twitter :: @pivovarit
Streamlazy-initializednonreusableGitHub, Twitter :: @pivovarit
intermediate operations.map().flatMap().filter().peek()GitHub, Twitter :: @pivovarit
intermediate operations.map().flatMap().filter().peek()Stream not consumed:does not print anythingGitHub, Twitter :: @pivovarit
Consuming Stream.forEach(Consumer).collect().reduce(BinaryOperator).allMatch(), anyMatch(), noneMatch().findFirst(), findAny().count().toArray()GitHub, Twitter :: @pivovarit
Stream.reduce()GitHub, Twitter :: @pivovarit
Collectors.toList(), toMap(), toSet(), toCollection().minBy(), maxBy().joining().partitioningBy()...and many othersGitHub, Twitter :: @pivovarit
Collectors.toList()GitHub, Twitter :: @pivovarit
Stream in APIs"any string".chars()Files.newDirectoryStream()Random.ints()...GitHub, Twitter :: @pivovarit
you want more?GitHub, Twitter :: @pivovarit
github.com/TouK/ThrowingFunctionhttp://www.javaslang.io/GitHub, Twitter :: @pivovarit
Thank You!GitHub, Twitter :: @pivovarit
REFERENCES:-"MONADIC JAVA" BY MARIO FUSCO-"WHAT'S WRONG WITH JAVA 8" BY PIERRE-YVES SAUMONT-WWW.ORACLE.COM-"A FISTFUL OF MONADS" - LEARN YOU A HASKELL FOR GREAT GOOD