簡體   English   中英

嵌套的Java 8用於循環和條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM