Meh*_*lik 6 java reusability java-8 java-stream
我知道,只要我们terminal method在上调用any stream,它就会关闭。
如果我们尝试在封闭的流上调用任何其他终端函数,则将导致java.lang.IllegalStateException: stream has already been operated upon or closed。
但是,如果我们想多次重复使用同一流怎么办?
如何做到这一点?
是的,在Java 8流中要重用流是不可以的
例如,对于任何终端操作,当操作关闭时,流将关闭。但是,当我们在链中使用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
Run Code Online (Sandbox Code Playgroud)
但与此相反,如果我们使用:
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
Run Code Online (Sandbox Code Playgroud)
在这里,.get()“构造”一个新的流,并在达到这一点时不再重用。
干杯!
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |