我有一个usecase,其中我想修改列表中的一些条目,基于某种条件,并保留其余的内容。为此,我正在考虑使用java流,但我找不到一个可行的解决方案。我知道使用filter
和map
是行不通的,因为它会过滤掉不满足条件的元素。有什么我可以用的吗?
例子-
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]
发布于 2022-09-09 14:28:20
您可以将映射操作设置为条件,并删除筛选器:
List<Integer> b = a.stream()
.map(i -> i % 2 == 0 ? i * i : i)
.collect(Collectors.toList());
发布于 2022-09-09 14:31:16
您可以将条件放在地图上,如下所示:
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());
发布于 2022-09-09 14:37:12
如果您只需要修改一些条目,则不需要流并创建一个新列表。相反,您可以使用List#replaceAll
a.replaceAll(i -> i % 2 == 0 ? i * i : i);
https://stackoverflow.com/questions/73663613
复制相似问题