我在将这个for循环简化为Java 8中的流时遇到麻烦,该流的输出与该for循环不匹配for (Object1 ob1s : getObject1s){ if (ob1s.hasChild != null){ map1.get(ob1holder).add(ob1s); if(Objects.equals(ob1.getHolder, Boolean.TRUE)) { map1.get(ob11holder).add(ob1s.getID); } if (ob1s.getObject2 != null){ for (Object2 ob2 : ob1s.getObject2.getObjects){ map.get(ob2holder).add(ob2); } } }}尝试:getObject1s.stream() .filter(ob1s -> ob1s.hasChild != null) .map(ob1s -> {map.get(ob1holder).add(ob1s); if (Objects.equals(ob1.getHolder, Boolean.TRUE)) { map.get(ob11holder).add(ob1s.getID);} return ob1s;}) .filter(ob1s -> ob1s.getObject2 != null) .flatMap(ob1s -> ob1s.getObject2.getObjects.stream()) .map(ob2 -> map.get(ob2holder).add(ob2));
1 回答
![?](http://img1.sycdn.imooc.com/54584c5e0001491102200220-100-100.jpg)
芜湖不芜
TA贡献1796条经验 获得超7个赞
流中没有终端操作,因此不执行流。
getObject1s.stream()
.filter(ob1s -> ob1s.hasChild != null)
.forEach(ob1s ->{
map1.get(ob1holder).add(ob1s);
if(Boolean.TRUE.equal(ob1.getHolder)){ //null safe
map1.get(ob11holder).add(ob1s.getID);
}
if (ob1s.getObject2 != null){
ob1s.getObject2.getObjects.stream()
.forEach(ob2 -> map.get(ob2holder).add(ob2));
}
})
添加回答
举报
0/150
提交
取消