我在將這個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 回答

蕪湖不蕪
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
提交
取消