java - 在流过滤器之后访问所有元素

标签 java java-8 java-stream

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

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

我怎样才能返回一个包含已更改的未更改值的数组?

最佳答案

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]

关于java - 在流过滤器之后访问所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48242644/

相关文章:

java - 在 Android 中维护专业版和免费版

java - 为什么 JVM 有 iconst_2 - iconst_5 操作码?

java - Stream collect with Generic 类型

java - 在 Mockito 中调用真实方法,但拦截结果

java - 流是否使用流源的特征?

java - Substance 6.1 升级提供了当 Substance 不是当前 LAF 异常时使用的 Substance 委托(delegate)

java - JPanel的自动重绘

java - 纪元年和周年的区别?

java - Java 8按属性区分

java - 如何使用 flatmap java8 根据值的键数对 HashMap 进行排序?