overview of java 8 streams (part 1) - vanderbilt universityschmidt/cs891f/2018-pdfs/... · •java...
TRANSCRIPT
![Page 1: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/1.jpg)
Overview of Java 8 Streams (Part 1)
Douglas C. [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science
Institute for Software
Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
![Page 2: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/2.jpg)
2
Learning Objectives in this Part of the Lesson• Understand the structure & functionality of Java 8 streams
Aggregate operation (behavior f)
Input x
Output f(x)
Output g(f(x))
Output h(g(f(x)))
Aggregate operation (behavior g)
Aggregate operation (behavior h)
![Page 3: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/3.jpg)
3
Learning Objectives in this Part of the Lesson• Understand the structure & functionality of Java 8 streams, e.g.,
• Fundamentals of streams
Aggregate operation (behavior f)
Input x
Output f(x)
Output g(f(x))
Output h(g(f(x)))
Aggregate operation (behavior g)
Aggregate operation (behavior h)
![Page 4: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/4.jpg)
4
Learning Objectives in this Part of the Lesson• Understand the structure & functionality of Java 8 streams, e.g.,
• Fundamentals of streams
• We’ll use an example program to illustrate key concepts Aggregate operation (behavior f)
Input x
Output f(x)
Output g(f(x))
Output h(g(f(x)))
Aggregate operation (behavior g)
Aggregate operation (behavior h)
See github.com/douglascraigschmidt/LiveLessons/tree/master/Java8/ex12
Stream
.of("horatio",
"laertes",
"Hamlet", ...)
.filter(s -> toLowerCase
(s.charAt(0)) == 'h')
.map(this::capitalize)
.sorted()
.forEach(System.out::println);
![Page 5: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/5.jpg)
5
Overview of Java 8 Streams
![Page 6: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/6.jpg)
6
• Java 8 streams are a framework inthe Java class library that provides several key benefits to programs
Overview of Java 8 Streams
See docs.oracle.com/javase/tutorial/collections/streams
![Page 7: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/7.jpg)
7
• Java 8 streams are a framework inthe Java class library that provides several key benefits to programs, e.g.
• Manipulate flows of data declaratively via function composition
Overview of Java 8 Streams…
This stream expresses whatoperations to perform, not
how to perform them
See github.com/douglascraigschmidt/LiveLessons/tree/master/ImageStreamGang
filter(not(this::urlCached))
collect(toList())
map(this::downloadImage)
flatMap(this::applyFilters)
stream()
![Page 8: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/8.jpg)
8
…
filter(not(this::urlCached))
collect(toList())
map(this::downloadImage)
flatMap(this::applyFilters)
parallelStream()
• Java 8 streams are a framework inthe Java class library that provides several key benefits to programs, e.g.
• Manipulate flows of data declaratively via function composition
• Enable transparent parallelization without the need to write any multi-threaded code
Overview of Java 8 Streams
The data elements in this stream are automatically
mapped to processor cores
See docs.oracle.com/javase/tutorial/collections/streams/parallelism.html
![Page 9: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/9.jpg)
9
• A stream is a pipeline of aggregate operations that process a sequence of elements (aka, “values” or “data”)
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
See www.tutorialspoint.com/java8/java8_streams.htm
Input x
Output f(x)
Output g(f(x))
Overview of Java 8 Streams
![Page 10: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/10.jpg)
10
• A stream is a pipeline of aggregate operations that process a sequence of elements (aka, “values” or “data”)
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
See docs.oracle.com/javase/tutorial/collections/streams
Input x
Output f(x)
Output g(f(x))
Overview of Java 8 Streams
An aggregate operation is a higher-order function that applies a “behavior” parameter to every element in a stream
![Page 11: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/11.jpg)
11
• A stream is a pipeline of aggregate operations that process a sequence of elements (aka, “values” or “data”)
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Input x
Output f(x)
Output g(f(x))
A stream is conceptually unbounded, though it’s often bounded by practical constraints
Overview of Java 8 Streams
![Page 12: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/12.jpg)
12
• A stream is a pipeline of aggregate operations that process a sequence of elements (aka, “values” or “data”)
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
See github.com/douglascraigschmidt/LiveLessons/tree/master/Java8/ex12
Input x
Output f(x)
Output g(f(x))
Stream
.of("horatio",
"laertes",
"Hamlet", ...)
.filter(s -> toLowerCase
(s.charAt(0)) == 'h')
.map(this::capitalize)
.sorted()
.forEach(System.out::println);
Overview of Java 8 Streams
![Page 13: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/13.jpg)
13
Stream source• A stream is created via a factory method
See en.wikipedia.org/wiki/Factory_method_pattern
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Input x
Output f(x)
Output g(f(x))
Stream
.of("horatio",
"laertes",
"Hamlet", ...)
...
Overview of Java 8 Streams
![Page 14: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/14.jpg)
14
Stream source• A stream is created via a factory method
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Input x
Output f(x)
Output g(f(x))
Stream
.of("horatio",
"laertes",
"Hamlet", ...) ...
Stream<String>
Array<String>
“horatio” …
…
“laertes” “Hamlet”
“horatio” “laertes” “Hamlet”
The of() factory method converts an array of T into a stream of T
Overview of Java 8 Streams
See docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#of
![Page 15: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/15.jpg)
15
Stream source• A stream is created via a factory method
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Input x
Output f(x)
Output g(f(x))
List<String> l1 = ...;
List<String> l2 = ...;
List<String> l3 = ...;
Stream
.of(l1, l2, l3)
.flatMap(List::stream)
...
.forEach(System.out::println);
of() is flexible, especially when combined with other aggregate operations
Overview of Java 8 Streams
See github.com/douglascraigschmidt/LiveLessons/tree/master/Java8/ex12
![Page 16: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/16.jpg)
16
• A stream is created via a factory method
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Input x
Output f(x)
Output g(f(x))
There are many other factory methods that create streams
collection.stream()
collection.parallelStream()
Pattern.compile(…).splitAsStream()
Stream.of(value1,… ,valueN)
Arrays.stream(array)
Arrays.stream(array, start, end)
Files.lines(file_path)
"string".chars()
Stream.builder().add(...)....build()
Stream.generate(generate_expression)
Files.list(file_path)
Files.find(file_path, max_depth, mathcher)
Stream.generate(iterator::next)
Stream.iterate(init_value, generate_expression)
StreamSupport.stream(iterable.spliterator(), false)
...
Overview of Java 8 StreamsStream source
![Page 17: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/17.jpg)
17
• An aggregate operation performs a behavior on each element in a stream
A behavior is implemented by a lambda expression or method reference
Aggregate operation (behavior f)
Input x
Overview of Java 8 Streams
![Page 18: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/18.jpg)
18
• An aggregate operation performs a behavior on each element in a stream
Aggregate operation (behavior f)
Input x
See github.com/douglascraigschmidt/LiveLessons/tree/master/Java8/ex12
Stream
.of("horatio",
"laertes",
"Hamlet", ...)
.filter(s -> toLowerCase
(s.charAt(0)) == 'h')
.map(this::capitalize)
.sorted()
.forEach(System.out::println);
Overview of Java 8 Streams
Stream<String>
Stream<String>
“horatio” “Hamlet”
“Horatio” “Hamlet”Method reference
![Page 19: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/19.jpg)
19
• An aggregate operation performs a behavior on each element in a stream
• Ideally, a behavior’s output in a stream depends only on its input arguments
Aggregate operation (behavior f)
See en.wikipedia.org/wiki/Side_effect_(computer_science)
Input x
Output f(x)
Overview of Java 8 Streams
![Page 20: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/20.jpg)
20
• An aggregate operation performs a behavior on each element in a stream
• Ideally, a behavior’s output in a stream depends only on its input arguments
Aggregate operation (behavior f)
Input x
Output f(x)String capitalize(String s) {
if (s.length() == 0)
return s;
return s.substring(0, 1)
.toUpperCase()
+ s.substring(1)
.toLowerCase();
See github.com/douglascraigschmidt/LiveLessons/tree/master/Java8/ex12
Overview of Java 8 Streams
![Page 21: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/21.jpg)
21
• An aggregate operation performs a behavior on each element in a stream
• Ideally, a behavior’s output in a stream depends only on its input arguments
• Behaviors with side-effects likely incur race conditions in parallel streams
Aggregate operation (behavior f)
Input x
Output f(x)
Overview of Java 8 Streams
See en.wikipedia.org/wiki/Race_condition#Software
Race conditions arise in software when an application depends on the sequence or
timing of threads for it to operate properly
![Page 22: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/22.jpg)
22In Java you must avoid race conditions, i.e., the compiler & JVM won’t save you..
• An aggregate operation performs a behavior on each element in a stream
• Ideally, a behavior’s output in a stream depends only on its input arguments
• Behaviors with side-effects likely incur race conditions in parallel streams
Overview of Java 8 Streams
Only you can prevent
race conditions!
Aggregate operation (behavior f)
Input x
Output f(x)
![Page 23: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/23.jpg)
23
• Streams enhance flexibility by forming a “processing pipeline” that chains multiple aggregate operations together
Aggregate operation (behavior f)
Aggregate operation (behavior g)
See en.wikipedia.org/wiki/Pipeline_(software)
Input x
Output f(x)
Output g(f(x))
Aggregate operation (behavior h)
Output h(g(f(x)))
Overview of Java 8 Streams
![Page 24: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/24.jpg)
24
• Streams enhance flexibility by forming a “processing pipeline” that chains multiple aggregate operations together
of(“horatio”, “laertes”, “Hamlet”, …)
filter(s->toLowerCase(s.charAt(0)…)
Each aggregate operation in the pipeline can filter and/or transform the stream
Stream<String>
Stream<String>
Stream<String>
Stream<String>
Array<String>
“horatio” …
…
“laertes” “Hamlet”
“horatio” “laertes” “Hamlet”
“horatio” “Hamlet”
“Horatio” “Hamlet”
“Horatio”“Hamlet”
sorted()
Overview of Java 8 Streams
map(this::capitalize)
List of names
Stream of names
Stream of names starting with ‘h’
Stream of capitalized names
Stream of sorted names
![Page 25: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/25.jpg)
25
• A stream holds no non-transient storage
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Input x
Output f(x)
Output g(f(x))
Aggregate operation (behavior h)
Output h(g(f(x)))
Overview of Java 8 Streams
![Page 26: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/26.jpg)
26
• Every stream works very similarly
Overview of Java 8 Streams
![Page 27: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/27.jpg)
27
• Every stream works very similarly
• Starts with a source of data
e.g., a Java array, collection, generator function, or input channel
Stream
.of("horatio",
"laertes",
"Hamlet", ...)
...
…
Overview of Java 8 Streams
![Page 28: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/28.jpg)
28
• Every stream works very similarly
• Starts with a source of data
e.g., a Java array, collection, generator function, or input channel
List<String> characters =
Arrays.asList("horatio",
"laertes",
"Hamlet", ...);
characters
.stream()
...
…
Overview of Java 8 Streams
![Page 29: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/29.jpg)
29
• Every stream works very similarly
• Starts with a source of data
• Processes data through a pipeline of intermediate operations that each map an input stream to an output stream
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Examples of intermediate operations include filter(), map(), & flatMap()
Input x
Output f(x)
Output g(f(x))
Stream
.of("horatio", "laertes",
"Hamlet", ...)
.filter(s -> toLowerCase
(s.charAt(0)) == 'h')
.map(this::capitalize)
.sorted()
...
…
Overview of Java 8 Streams
![Page 30: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/30.jpg)
30
• Every stream works very similarly
• Starts with a source of data
• Processes data through a pipeline of intermediate operations that each map an input stream to an output stream
• Finishes with a terminal operation that yields a non-stream result
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Output f(x)
Output g(f(x))...
.filter(s -> toLowerCase
(s.charAt(0)) == 'h')
.map(this::capitalize)
.sorted()
.forEach(System.out::println);
…
Input x
Overview of Java 8 Streams
![Page 31: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/31.jpg)
31
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Output f(x)
Output g(f(x))
…
Input x
Overview of Java 8 Streams
A terminal operation triggers processing of intermediate operations in a stream
• Every stream works very similarly
• Starts with a source of data
• Processes data through a pipeline of intermediate operations that each map an input stream to an output stream
• Finishes with a terminal operation that yields a non-stream result
...
.filter(s -> toLowerCase
(s.charAt(0)) == 'h')
.map(this::capitalize)
.sorted()
.forEach(System.out::println);
![Page 32: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/32.jpg)
32
• Every stream works very similarly
• Starts with a source of data
• Processes data through a pipeline of intermediate operations that each map an input stream to an output stream
• Finishes with a terminal operation that yields a non-stream result
Overview of Java 8 Streams
See www.youtube.com/watch?v=oWlWEKNM5AwEach stream must have one (& only one) terminal operation
![Page 33: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/33.jpg)
33See radar.oreilly.com/2015/02/java-8-streams-api-and-parallelism.html
• Each aggregate operation in a stream runs its behavior sequentially by default
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Output f(x)
Output g(f(x))
Output h(g(f(x)))
…
Input x
Overview of Java 8 Streams
![Page 34: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/34.jpg)
34
• Each aggregate operation in a stream runs its behavior sequentially by default
• i.e., one at a time in a single thread
Aggregate operation (behavior f)
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Output f(x)
Output g(f(x))
Output h(g(f(x)))
…
Input x
Overview of Java 8 Streams
See docs.oracle.com/javase/tutorial/collections/streams
We’ll cover sequential streams first
![Page 35: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/35.jpg)
35
• A Java 8 parallel stream splits its elements into multiple chunks & uses a common fork-join pool to process the chunks independently
Aggregate operation (behavior f)
Output f(x)
Output g(f(x))
Aggregate operation (behavior g)
Aggregate operation (behavior h)
Output h(g(f(x)))
See docs.oracle.com/javase/tutorial/collections/streams/parallelism.html
…
Input x
Overview of Java 8 Streams
We’ll cover parallel streams later
![Page 36: Overview of Java 8 Streams (Part 1) - Vanderbilt Universityschmidt/cs891f/2018-PDFs/... · •Java 8 streams are a framework in the Java class library that provides several key benefits](https://reader030.vdocument.in/reader030/viewer/2022040409/5ec749ef2f84eb18956306dc/html5/thumbnails/36.jpg)
36
End of Overview of Java 8 Streams (Part 1)