Details
-
Type:
Bug
-
Status: Resolved
-
Priority:
P4
-
Resolution: Won't Fix
-
Affects Version/s: 11.0.9.1, 16, 17
-
Fix Version/s: None
-
Component/s: core-libs
-
Labels:
-
Subcomponent:
Description
Following up on https://bugs.openjdk.java.net/browse/JDK-8075939, there's still a case where Stream.flatMap() doesn't get short circuited, when using Stream.iterator():
// --------------------------------------------------------
Iterator<Integer> it =
Stream.of("a", "b")
.flatMap(s -> Stream
.of(1, 2, 3, 4)
.filter(i -> { System.out.println(i); return true; }))
.iterator();
it.hasNext(); // This consumes the entire flatmapped stream
it.next();
// --------------------------------------------------------
The above program prints:
1
2
3
4
This program never stops:
// --------------------------------------------------------
Iterator<Integer> it =
Stream.of("a", "b")
.flatMap(s -> Stream
.iterate(1, i -> i)
.filter(i -> { System.out.println(i); return true; }))
.iterator();
it.hasNext();
it.next();
// --------------------------------------------------------
// --------------------------------------------------------
Iterator<Integer> it =
Stream.of("a", "b")
.flatMap(s -> Stream
.of(1, 2, 3, 4)
.filter(i -> { System.out.println(i); return true; }))
.iterator();
it.hasNext(); // This consumes the entire flatmapped stream
it.next();
// --------------------------------------------------------
The above program prints:
1
2
3
4
This program never stops:
// --------------------------------------------------------
Iterator<Integer> it =
Stream.of("a", "b")
.flatMap(s -> Stream
.iterate(1, i -> i)
.filter(i -> { System.out.println(i); return true; }))
.iterator();
it.hasNext();
it.next();
// --------------------------------------------------------
Attachments
Issue Links
- relates to
-
JDK-8268483 Guidance on stream limitations in laziness and termination
-
- Open
-
-
JDK-8267452 Delegate forEachRemaining in Spliterators.iterator()
-
- Resolved
-
-
JDK-8267758 Double nested Stream.flatMap buffer the entire Stream before processing it
-
- Resolved
-