No, this is not possible because your stream pipeline is closed with each "final" operation. An alternative is to use the Stream iterator. You will have only one iterator. I assume that you really want to, as you insist on creating only one thread. However, you will have to skip the "functional" part.
Stream<String> strings = ... ; Iterator<String> stringsIt = strings.iterator(); if (stringsIt.hasNext()) { System.out.printf("header: %s%n", stringsIt.next()); while (stringsIt.hasNext()) { System.out.printf("line: %s%n", stringsIt.next()); } }
Alternative, with ZouZou comments:
Stream<String> strings = ... ; Iterator<String> stringsIt = strings.iterator(); if (stringsIt.hasNext()) { System.out.printf("header: %s%n", stringsIt.next()); stringsIt.forEachRemaining(line -> { System.out.printf("line: %s%n", line); }); }
The final answer with all the functionality is actually the following:
Stream<String> lines = ... ; Spliterator<String> linesIt = lines.spliterator(); linesIt.tryAdvance(header -> { System.out.printf("header: %s%n", header); }); linesIt.forEachRemaining(line -> { System.out.printf("line: %s%n", line); });
source share