Java 8 List of list of List of Objects flatmap 获取最里面的列表

Java 8 List of list of list of Objects flatmap fetch the inner most list

我不太熟悉 Java 8(仍在学习),想看看是否可以使用 flatMap 找到与以下代码等效的内容。

我用的是lombok @Builder(你可以忽略那部分)

我们可能需要的检查很少 - 列表可能为空

我的对象的粗略草图 - class 从头开始​​{

public static void main(String[] args) {
    List<Object2> object2List = new ArrayList<>();
    object2List.add(Object2.builder().needThisList(Arrays.asList("good" , "bad")).build());
    object2List.add(Object2.builder().needThisList(Arrays.asList("worse" , "awesome")).build());

    List<Object2> object2List_2 = new ArrayList<>();
    object2List_2.add(Object2.builder().needThisList(Arrays.asList("good1" , "bad1")).build());
    object2List_2.add(Object2.builder().needThisList(Arrays.asList("worse1" , "awesome1")).build());

    List<Object1> object1List = new ArrayList<>();
    object1List.add(Object1.builder().object2List(object2List).build());
    object1List.add(Object1.builder().object2List(object2List_2).build());

    //Please get me final list of all the Strings


   }
}

@Builder
class Object1 {
    List<Object2> object2List;
}

@Builder
class Object2 {
    List<String> needThisList;
}

以下是它在没有 Lombock 的情况下如何工作。

public class Scratch {
    public static void main(String[] args) {
        List<List<String>> object2List = new ArrayList<>();
        object2List.add(List.of("good", "bad"));
        object2List.add(List.of("worse", "awesome"));

        List<List<String>> object2List_2 = new ArrayList<>();
        object2List_2.add(Arrays.asList("good1", "bad1"));
        object2List_2.add(Arrays.asList("worse1", "awesome1"));

        List<List<List<String>>> object1List = new ArrayList<>();
        object1List.add(object2List);
        object1List.add(object2List_2);

        // Please get me final list of all the Strings

        System.out.println(object1List.stream().flatMap((outer) -> outer.stream()).flatMap((mid) -> mid.stream()).collect(Collectors.toList()));
    }
}

打印:

[good, bad, worse, awesome, good1, bad1, worse1, awesome1]

编辑

Re-reading原来的post,如果你想保留原来的列表(即,最后得到一个列表的4个列表),那么你可以这样做:

System.out.println(object1List.stream().flatMap((outer) -> outer.stream()).collect(Collectors.toList()));

将打印出:

[[good, bad], [worse, awesome], [good1, bad1], [worse1, awesome1]]