hanoi jug java 8 stream api
TRANSCRIPT
![Page 1: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/1.jpg)
Hanoi JUG - 2015
Java 8: Stream API
Vu Dang Ngoc - eXo
![Page 2: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/2.jpg)
Hanoi JUG - 2015
Introduction to Stream API
1. Stream API at glance
a. Aggregate Operations, Terminal Operations
b. Laziness and performance tuning
2. How Stream API change the way we coding?
3. Advantage and disadvantage
4. Further reading
![Page 3: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/3.jpg)
Hanoi JUG - 2015
Stream example
![Page 4: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/4.jpg)
Hanoi JUG - 2015
Stream API at glance
● Pipeline contain a data source, 1 or many intermediate
operation, 1 terminal operation and linked together by
streams.
![Page 5: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/5.jpg)
Hanoi JUG - 2015
Stream source
![Page 6: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/6.jpg)
Hanoi JUG - 2015
Operations
![Page 7: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/7.jpg)
Hanoi JUG - 2015
Intermediate Operation
● Stream-producing: require a stream and
return another stream
● Always lazy
● Stateless and stateful operations
o Stateless (filter, map …): don’t require information of
other items.
o Stateful (distinct, sorted, limit, peek…): require
information of other items.
![Page 8: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/8.jpg)
Hanoi JUG - 2015
Terminal Operation
● End of pipeline
● Push intermediate operator working
● Short-circuiting: stream don’t have to travel
all data.
![Page 9: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/9.jpg)
Hanoi JUG - 2015
Laziness and performance tuning
● Intermediate operator run only when
Terminate operator asking
![Page 10: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/10.jpg)
Hanoi JUG - 2015
Laziness and performance tuning
![Page 11: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/11.jpg)
Hanoi JUG - 2015
Laziness and performance tuning
![Page 12: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/12.jpg)
Hanoi JUG - 2015
Stream is not loop
continue to next
element
You have no power
here!
![Page 13: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/13.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
![Page 14: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/14.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
![Page 15: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/15.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
![Page 16: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/16.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
![Page 17: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/17.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
● Terminal operator collect provide many way
to transform data
● Collectors class provide built-in collection
feature.
![Page 18: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/18.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
![Page 19: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/19.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
![Page 20: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/20.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
![Page 21: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/21.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
![Page 22: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/22.jpg)
Hanoi JUG - 2015
How Stream API change the way we coding?
![Page 23: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/23.jpg)
Hanoi JUG - 2015
Parallel stream
● Using Fork-Join Pool
● Side-effect
● Some parallel stream operations like reduce
and collect need additional computations
● All sub-tasks should finish in a reasonable
time
![Page 24: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/24.jpg)
Hanoi JUG - 2015
Parallel stream
![Page 25: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/25.jpg)
Hanoi JUG - 2015
Parallel stream
![Page 26: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/26.jpg)
Hanoi JUG - 2015
Parallel stream
![Page 27: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/27.jpg)
Hanoi JUG - 2015
Performance compare
![Page 28: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/28.jpg)
Hanoi JUG - 2015
Performance compare
![Page 29: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/29.jpg)
Hanoi JUG - 2015
Performance compare
![Page 30: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/30.jpg)
Hanoi JUG - 2015
Performance compare
![Page 31: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/31.jpg)
Hanoi JUG - 2015
Performance compare
![Page 32: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/32.jpg)
Hanoi JUG - 2015
Performance compare
![Page 33: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/33.jpg)
Hanoi JUG - 2015
Performance compare
![Page 34: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/34.jpg)
Hanoi JUG - 2015
Performance compare
![Page 35: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/35.jpg)
Hanoi JUG - 2015
Performance compare
![Page 36: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/36.jpg)
Hanoi JUG - 2015
Performance compare
![Page 37: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/37.jpg)
Hanoi JUG - 2015
Performance compare
![Page 38: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/38.jpg)
Hanoi JUG - 2015
Parallel stream performance is unstable
![Page 39: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/39.jpg)
Hanoi JUG - 2015
Advantage and Disadvantage
● The Goodo Reduce size of code
o Easy using parallel computing
o Developer can focus how to process data
o Built-in feature of Collectors class
● The Bado No customize operator
o Cannot random access
![Page 40: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/40.jpg)
Hanoi JUG - 2015
Advantage and Disadvantage
● And the Uglyo Stream cannot reuseable
o Parallel stream performance is unstable and
unpredictable
o Stream don’t store data and cannot modify source
collection.
o Can cause infinite stream
![Page 41: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/41.jpg)
Hanoi JUG - 2015
Infinite stream
![Page 42: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/42.jpg)
Hanoi JUG - 2015
Further reading
● Collection Pipes - article of Martin Fowler
about pipe and filter software pattern
● Java Fork-Join Calamity and Java Parallel
Calamity descript flaws of Fork/Join and
parallel stream
● Active vs Passive iterator
● Parallel Streams and Spliterators
![Page 43: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/43.jpg)
Hanoi JUG - 2015
Referent
● http://www.java2novice.com/java-sorting-
algorithms/quick-sort/
● http://javapapers.com/java/java-stream-api/
● http://winterbe.com/posts/2014/07/31/java8-stream-
tutorial-examples/
● http://www.informit.com/articles/article.aspx?p=2198914
● http://blog.credera.com/technology-insights/java/java-8-
part-1-lamdas-streams-functional-interfaces/
● https://docs.oracle.com/javase/8/docs/api/java/util/strea
m/package-summary.html
● http://java.dzone.com/articles/think-twice-using-java-8
● http://blog.jooq.org/2014/06/13/java-8-friday-10-subtle-
mistakes-when-using-the-streams-api/
![Page 44: Hanoi jug java 8 stream api](https://reader034.vdocuments.us/reader034/viewer/2022042701/55a858791a28ab6c2d8b4839/html5/thumbnails/44.jpg)
Hanoi JUG - 2015
Questions & Answers