Jef*_*ook 9 java java-8 java-stream
我是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.
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到以下错误...这是公平的.
Java8
In
Action
Exception 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)
Run Code Online (Sandbox Code Playgroud)
情景2:
// Filtering unique elements
List<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);
Run Code Online (Sandbox Code Playgroud)
这里我也操作流并关闭终端操作,那为什么我没有得到任何错误?