[英]Java 8 nested for loop and conditions
我在將這個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));
流中沒有終端操作,因此不執行流。
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));
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.