I recently learned about Stream
s in Java 8 and saw this example:
IntStream stream = IntStream.range(1, 20);
Now, let\'s say th
A Stream is a lazy evaluation mechanism for processing Collections efficiently. This means that all the intermediate operations on the Stream are not evaluated unless necessary for the final (terminal) operation.
In your example, the terminal operation is firstFirst()
. This means the Stream will evaluate the pipeline of intermediate operations until it finds a single int that results from passing the input Stream through all the intermediate operations.
The second filter only receives ints that pass the first filter, so it only processes the numbers 3,6,9,12,15 and then stops, since 15 passes the filter, and supplies the findFirst()
operation the only output it needs.
The first filter will only process ints of the input Stream as long as the terminal operation still requires data, and therefore it will only process 1 to 15.