Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8267359

Stream.flatMap() consumes entire flatmapped stream when Stream.iterator() is called

    XMLWordPrintable

    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:

      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();
      // --------------------------------------------------------

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              psandoz Paul Sandoz
              Reporter:
              leder Lukas Eder
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: