我知道每当我们在流上调用任何终端方法时,它就会被关闭.
如果我们尝试在封闭流上调用任何其他终端函数,则会导致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()“构造”一个新的流,并且只要它到达这一点就不会重用.
干杯!