Java 8 Stream#findFirst() is a short-circuiting terminal operation. Meaning it will stop generating the stream once an element is found (usually used with a filter() operation).
However, I want to know if it will short circuit on a stream created by flatmap. I.e. will it short circuit the streams created within the flatmap operation.
In other words, which code is more efficient (in terms of generating fewer elements in the stream):
Example 1 (with flatmap):
// produce range 0..99 (10 elements at a time)
return IntStream.rangeClosed(0, 9)
.flatMap(i -> IntStream.rangeClosed(i * 10, i * 10 + 9))
.filter(i -> i == 55)
.findFirst()
.getAsInt();
Example 2 (no flatmap):
// produce range 0..99 (all 100 elements at once)
return IntStream.rangeClosed(0, 99)
.filter(i -> i == 55)
.findFirst()
.getAsInt();