gpt4 book ai didi

Java 8 - 一旦 Stream 被消费和操作就会给出错误,但在另一种情况下它不会

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:49 25 4
gpt4 key购买 nike

我是 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.

当我运行它时,我得到以下错误...这是公平的。

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)

场景 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);

我这里也操作了流,关闭了终端操作,那为什么没有报错呢?

最佳答案

s.forEach 的两次调用使用相同的流,因此在第一个示例中出现异常,而对 stream() 的调用方法 --> numbers.stream() 每次生成(产生)一个新流 因此不会抛出 "java.lang.IllegalStateException: stream has already been操作或关闭”

关于Java 8 - 一旦 Stream 被消费和操作就会给出错误,但在另一种情况下它不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52689103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com