代码之家  ›  专栏  ›  技术社区  ›  Bao Thai

Java 8嵌套for循环和条件

  •  0
  • Bao Thai  · 技术社区  · 6 年前

    在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 回复  |  直到 6 年前
        1
  •  2
  •   Peter1982    6 年前

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

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