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
You want to create a stream from a source of data.
Use the static factory methods in the
Stream interface, or the
stream methods on
java.util.stream.Stream interface in Java 8 provides several static methods for creating streams. Specifically, you can use the static methods
Stream.of method takes a variable argument list of elements:
The implementation of the
of method in the standard library actually delegates to the
stream method in the
Arrays class, shown in