我是 Java 8 的新手,希望了解這兩種情況之間的區別。我知道一旦一個流被操作和消耗,那么流就不能再次被重用,它會給出一個錯誤。場景 1:List<String> title = Arrays.asList("Java8", "In", "Action"); Stream<String> s = title.stream(); s.forEach(System.out::println); s.forEach(System.out::println); // THIS WILL GIVE ERROR - streams has been already operated and closed.當我運行這個時,我得到以下錯誤......這是公平的。Java8InActionException in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed at java.util.stream.AbstractPipeline.sourceStageSpliterator(Unknown Source) at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) at com.test.Java8InAction.CH4.TraversableOnlyOnce.main(TraversableOnlyOnce.java:12)場景 2:// Filtering unique elementsList<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);numbers.stream().forEach(System.out::println);numbers.stream().filter(n -> n % 2 == 0).distinct().forEach(System.out::println);numbers.stream().filter(n -> n % 2 == 0).forEach(System.out::println);這里我也操作了stream,關閉了終端操作,那為什么沒有報錯呢?
3 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
因為一個流只能被消費一次。如果您想多次使用供應商,請為此使用供應商。
Supplier<Stream<String>> streamSupplier = ()-> Stream.of("Java8", "In", "Action");
然后用于get
創建新流。
streamSupplier.get().forEach(System.out::println);
但在第二種情況下,您每次都會創建一個新流。
添加回答
舉報
0/150
提交
取消