s.setState("ok")) .colle-6ren">
gpt4 book ai didi

java - 不能在一个流中制作 filter->forEach->collect 吗?

转载 作者:太空狗 更新时间:2023-10-29 22:43:03 27 4
gpt4 key购买 nike

我想实现这样的目标:

items.stream()
.filter(s-> s.contains("B"))
.forEach(s-> s.setState("ok"))
.collect(Collectors.toList());

过滤,然后从过滤的结果中改变一个属性,然后将结果收集到一个列表中。但是,调试器说:

Cannot invoke collect(Collectors.toList()) on the primitive type void.

我需要 2 个流吗?

最佳答案

forEach 被设计为终端操作,是的 - 调用它后您将无法执行任何操作。

惯用的方法是首先应用转换,然后将所有内容collect() 到所需的数据结构。

可以使用专为非变异操作设计的 map 执行转换。

如果您正在执行非变异操作:

 items.stream()
.filter(s -> s.contains("B"))
.map(s -> s.withState("ok"))
.collect(Collectors.toList());

其中 withState 是一种返回原始对象副本(包括所提供的更改)的方法。


如果您正在执行副作用:

items.stream()
.filter(s -> s.contains("B"))
.collect(Collectors.toList());

items.forEach(s -> s.setState("ok"))

关于java - 不能在一个流中制作 filter->forEach->collect 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45793226/

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