如何在Java流上调用多个终端操作

我知道每当我们在流上调用任何终端方法时,它就会被关闭.

如果我们尝试在封闭流上调用任何其他终端函数,则会导致java.lang.IllegalStateException:流已经被操作或关闭.

但是,如果我们想要多次重用同一个流呢?

怎么做到这一点?

最佳答案 是的,它是
Java 8流中重用流的重要NO

例如,对于任何终端操作,当操作关闭时,流关闭.但是当我们在链中使用Stream时,我们可以避免这种异常:

正常终端操作:

Stream<String> stream =
    Stream.of("d2", "a2", "b1", "b3", "c")
        .filter(s -> s.startsWith("a"));

stream.anyMatch(s -> true);    // ok
stream.noneMatch(s -> true);   // exception

但不是这样,如果我们使用:

Supplier<Stream<String>> streamSupplier =
    () -> Stream.of("d2", "a2", "b1", "b3", "c")
            .filter(s -> s.startsWith("a"));

streamSupplier.get().anyMatch(s -> true);   // ok
streamSupplier.get().noneMatch(s -> true);  // ok

这里.get()“构造”一个​​新的流,并且只要它到达这一点就不会重用.

干杯!

点赞