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]]
我不太熟悉 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]]