我的任务是过滤一个数组,更改剩余的元素并返回包含已更改和未更改值的数组。我的代码:
return Arrays.stream(sentence.split(" "))
.filter(/* do some filter to each value */)
.map(/* map this value*/)
.collect(Collectors.joining());
如何返回已更改的和未更改值的数组?
答案 0 :(得分:8)
filter
删除元素。如果您不想删除元素,而只是更改其中的一些元素,则可以使用?:
或map
内的if-else来有选择地更改元素。
例如:
System.out.println(Stream.of("abc", "def", "ghi")
.map(a -> a.equals("def") ? "xyz" : a)
.collect(Collectors.toList()));
或者:
System.out.println(Stream.of("abc", "def", "ghi")
.map(a -> {
if (a.equals("def"))
return "xyz";
else
return a;
})
.collect(Collectors.toList()));
这只会将等于def
的元素更改为xyz
(对于每个其他元素,它只会将该元素保持原样),输出将为:
[abc, xyz, ghi]
答案 1 :(得分:3)
我们也可以在没有流的情况下实现这一点。
List<String> list = Arrays.asList("abc", "def", "ghi");
list.replaceAll(s -> s.equals("def") ? "xyz" : s);
System.out.println(list);
<强>输出强>
[abc, xyz, ghi]
答案 2 :(得分:2)
最简单的选择是使用map
中间操作以及Dukeling提到的三元运算符,但另一种变体是:
String result =
Pattern.compile(" ")
.splitAsStream(sentence)
.map(s -> criteria ? modification : s) // partly pseudocode
.collect(Collectors.joining(" "));