Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8嵌套用于循环和条件_Java_Java 8_Nested - Fatal编程技术网

Java 8嵌套用于循环和条件

Java 8嵌套用于循环和条件,java,java-8,nested,Java,Java 8,Nested,在Java8中将这个for循环简化为流时,我遇到了一些问题,流的输出与for循环不匹配 for (Object1 ob1s : getObject1s){ if (ob1s.hasChild != null){ map1.get(ob1holder).add(ob1s); if(Objects.equals(ob1.getHolder, Boolean.TRUE)) {

在Java8中将这个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));

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

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));
            }
    })

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

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));
            }
    })

为什么您认为基于流的代码会更好?不一定更好,因为我计划为循环引入另一个嵌套的
for
循环,因此降低了代码中可见的循环复杂性。您在这里滥用了
map
方法。map功能应为无状态且无干扰;您正在更改
map1
@AndyTurner:遗憾的是,您的初始注释没有那么大帮助…因为
必须有一个终端操作才能执行任何操作…理想状态是什么并不重要。您应该使用
对象.equals(ob1.getHolder,Boolean.TRUE)
,除非您真的试图通过身份进行比较。为什么您认为基于流的代码会更好?不一定更好,因为我计划引入另一个嵌套的
for
循环,因此可以降低代码中可见的循环复杂性。您在滥用
map
方法。map功能应为无状态且无干扰;您正在更改
map1
@AndyTurner:遗憾的是,您的初始注释没有那么大帮助…因为
必须有一个终端操作才能执行任何操作…理想状态是什么并不重要。您应该使用
对象.equals(ob1.getHolder,Boolean.TRUE)
,除非您确实试图通过标识进行比较。我是否可以将第二个条件中的
for
转换为另一个流?哦,等等,nvm,让我回到你的问题上,我能不能将第二个条件中的
for
转换成另一个流?哦,等等,nvm,让我给你回电话