С точки зрения использования stream
в некоторой степени аналогичен iterator
в том смысле, что его можно использовать только один раз.
Если вы хотите снова использовать содержимое того же потока, вам нужно создать новый поток, как вы сделали первый.
Начиная с Java 12, вы можете передавать значения одного и того же потока в две ветви, используя метод Collectors.teeing()
.
List.stream().collect(Collectors.teeing(
Collector1, // do something with the stream
Collector2, // do something else with the stream
BiFunction, use to merge results)
Вы также можете сделать это.
Supplier<Stream<String>> ss1 = br.lines; // read all the lines
Supplier<Stream<String>> ss2 = br.lines; // read all the lines
Теперь вы можете использовать ss1
и ss2
как два отдельных потока.