发布
社区首页 >问答首页 >Java流使用

Java流使用
EN

Stack Overflow用户
提问于 2022-09-09 14:22:37
回答 3查看 111关注 0票数 0

我有一个usecase,其中我想修改列表中的一些条目,基于某种条件,并保留其余的内容。为此,我正在考虑使用java流,但我找不到一个可行的解决方案。我知道使用filtermap是行不通的,因为它会过滤掉不满足条件的元素。有什么我可以用的吗?

例子-

代码语言:javascript
代码运行次数:0
复制
List<Integer> a = new ArrayList<>();
a.add(1); a.add(2);

// I want to get square of element if element is even 
// Current solution 
List<Integer> b = a.stream().filter(i -> i % 2 == 0).map(i -> i * i).collect(Collectors.toList());

// This outputs - b = [4]
// But I want - b = [1, 4]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-09 14:28:20

您可以将映射操作设置为条件,并删除筛选器:

代码语言:javascript
代码运行次数:0
复制
List<Integer> b = a.stream()
            .map(i -> i % 2 == 0 ? i * i : i)
            .collect(Collectors.toList());
票数 7
EN

Stack Overflow用户

发布于 2022-09-09 14:31:16

您可以将条件放在地图上,如下所示:

代码语言:javascript
代码运行次数:0
复制
List<Integer> a = new ArrayList<>();
a.add(1);
a.add(2);
List<Integer> b = a.stream().map(i -> i % 2 == 0 ? i * i : i).collect(Collectors.toList());
票数 0
EN

Stack Overflow用户

发布于 2022-09-09 14:37:12

如果您只需要修改一些条目,则不需要流并创建一个新列表。相反,您可以使用List#replaceAll

代码语言:javascript
代码运行次数:0
复制
a.replaceAll(i -> i % 2 == 0 ? i * i : i);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73663613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档