有没有办法重用流?

2022-08-31 12:05:14

我正在学习新的Java 8功能,在尝试流()和收集器时,我意识到流不能使用两次。java.util.stream.Stream

有没有办法重用它?


答案 1

文档中

流只能操作一次(调用中间或终端流操作)。

如果流实现检测到流正在被重用,它可能会引发 IllegalStateException。

所以答案是否定的,流不是要重用的。


答案 2

如果您希望具有重用流的效果,则可以将流表达式包装在 Supplier 中,并在需要新表达式时进行调用。例如:myStreamSupplier.get()

Supplier<Stream<String>> sup = () -> someList.stream();
List<String> nonEmptyStrings = sup.get().filter(s -> !s.isEmpty()).collect(Collectors.toList());
Set<String> uniqueStrings = sup.get().collect(Collectors.toSet());

推荐