嵌套的Java 8用于循环和条件

时间:2018-06-22 22:48:50

标签: java java-8 nested

在Java 8中将这个for循环简化为流时,我遇到了麻烦,该流的输出与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 个答案:

答案 0 :(得分:2)

您的流中没有终端操作,因此不执行流。

void foo( T bar );