Java8 新特性中的Stream,如何按照条件替换原来stream中的数据?

filter只能对满足一种条件的元素执行操作,我想设置多种条件,每种条件执行不同操作,如何做?

例如: RawDataList中存放的是 物品名称,有的名称包含".",有的不包含
1.将所有包含"."的物品名中的"."去掉,并生成新的List
2.将所有名称长度>2的物品名,只保留最后的2个字符
3.按照以下代码,我可以分部完成,但是如何一次性解决呢?

RawDataList.stream().filter(e -> e.contains("."))
.map(e -> e.substring(0, e.lastIndexOf(".")))
.collect(Collectors.toCollection(LinkedList::new));

RawDataList.stream().filter(e -> e.length() > 2)
.map(e -> e.substring(e.length() - 2, e.length()))
.collect(Collectors.toCollection(LinkedList::new));

1、首先利用foreach()方法对Stream元素进行遍历,如下图所示。

2、利用filter()方法对Stream元素进行过滤,其中x -> x > 5为Lambda表达式,作为filter的参数。执行过滤后满足过滤条件的Stream元素将会保留。

3、利用map()方法对Stream元素进行一对一映射转换,如下图所示。

4、此外Stream对象还有很多其他非常有用的方法,可以自己尝试,如下图所示就完成了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-09-09
不能...你可以参考一下我在知乎上的一个回答
https://www.zhihu.com/question/50413642/answer/121075486?from=profile_answer_card本回答被提问者采纳