s + "-" + -6ren">
gpt4 book ai didi

Java 8 急切地获取中间流操作的结果

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:29 25 4
gpt4 key购买 nike

给定以下代码:

List<String> list = Arrays.asList("a", "b", "c");
list.stream()
.map(s -> s + "-" + s) //"a-a", "b-b", "c-c"
.filter(s -> !s.equals("b-b")) //"a-a", "c-c"
.forEach(s -> System.out.println(s));

mapfilter 是中间操作,forEach 是终端操作。只有终端操作执行后,我们才能得到数据转换的结果。

有什么方法可以强制评估更急切并产生某种中间结果 - 而不会破坏流操作链?例如,我想要“a-a”、“b-b”、“c-c”的列表(这将是第一个中间操作的结果)。

最佳答案

您可以使用 peek :

List<String> allPairs = new ArrayList<>();
List<String> list = Arrays.asList("a", "b", "c");
list.stream()
.map(s -> s + "-" + s) //"a-a", "b-b", "c-c"
.peek(allPairs::add)
.filter(s -> !s.equals("b-b")) //"a-a", "c-c"
.forEach(s -> System.out.println(s));

这样计算在终端操作之前仍然不会开始,但您可以在任何时候“拦截”流内容并以任何您喜欢的方式使用它。

但是,如果您的终端操作短路(如 findFirst),请当心:这样并非所有元素都可能传递给 peek

关于Java 8 急切地获取中间流操作的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30231816/

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