流过滤后访问所有元素

Vol*_*gel 6 java java-8 java-stream

我的任务是过滤一个数组,更改剩余的元素并返回包含已更改和未更改值的数组.我的代码:

return Arrays.stream(sentence.split(" "))
    .filter(/* do some filter to each value */)
    .map(/* map this value*/)
    .collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

我怎样才能返回改变的数组不变的价值观?

Duk*_*ing 8

filter删除元素.如果您不想删除元素,而只是更改其中的一些元素,则可以使用?:或if-else inside map来有选择地更改元素.

例如:

System.out.println(Stream.of("abc", "def", "ghi")
    .map(a -> a.equals("def") ? "xyz" : a)
    .collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)

要么:

System.out.println(Stream.of("abc", "def", "ghi")
    .map(a -> {
       if (a.equals("def"))
          return "xyz";
       else
          return a;
    })
    .collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)

这将只改变其等于元件defxyz(对于彼此的元件,但是简单地保持该元素原样)和输出将是:

[abc, xyz, ghi]
Run Code Online (Sandbox Code Playgroud)