Chapter 3. Streams
Java 8 introduces a new streaming metaphor to support functional programming. A stream is a sequence of elements that does not save the elements or modify the original source. Functional programming in Java often involves generating a stream from some source of data, passing the elements through a series of intermediate operations (called a pipeline), and completing the process with a terminal expression.
Streams can only be used once. After a stream has passed through zero or more intermediate operations and reached a terminal operation, it is finished. To process the values again, you need to make a new stream.
Streams are also lazy. A stream will only process as much data as is necessary to reach the terminal condition. Recipe 3.13 shows this in action.
The recipes in this chapter demonstrate various typical stream operations.
3.1 Creating Streams
Problem
You want to create a stream from a source of data.
Solution
Use the static factory methods in the Stream
interface, or the stream
methods on Iterable
or Arrays
.
Discussion
The new java.util.stream.Stream
interface in Java 8 provides several static methods for creating streams. Specifically, you can use the static methods Stream.of
, Stream.iterate
, and Stream.generate
.
The Stream.of
method takes a variable argument list of elements:
static
<
T
>
Stream
<
T
>
of
(
T
...
values
)
The implementation of the of
method in the standard library actually delegates to the stream
method in the Arrays
class, shown in
Get Modern Java Recipes now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.