Java 8嵌套列表作为父级中的单例列表

时间:2019-03-04 09:00:10

标签: java arraylist java-8 java-stream

public class Parent {
    String name;
    List<Child> children;
}

public class Child {
    String childName;
}

我有这两个类,通过它们我的数据集变为:

List<Parent> parents = new ArrayList<>();

List<Child> _child1 = new ArrayList<>();
_child1.add(new B("p1c1"));
_child1.add(new B("p1c2"));
_child1.add(new B("p1c3"));
Parent p1 = new Parent("p1", _child1);
parents.add(p1);


List<Child> _child2 = new ArrayList<>();
_child2.add(new B("p2c1"));
Parent p2 = new Parent("p2", _child2);
parents.add(p2);

是否可以通过一些数据进行如下转换:

parents[
    parent1 {"p1", ["p1c1"]}, parent1 {"p1", ["p1c2"]}, parent1 {"p1", ["p1c3"]},
    parent2 {"p2", ["p2c1"]}
]

我想将嵌套列表分解为单例嵌套列表,主要目的是使用Java 8中的stream api实现此目的,您还能建议避免并发修改异常的最佳方法吗?

1 个答案:

答案 0 :(得分:4)

这应该做:

parents.stream()
        .flatMap(parent -> parent.getChildren()
                            .stream()
                            .map(child -> new SimpleEntry<>(parent, child)))
        .map(pair -> new Parent(pair.getKey().getName(), 
                                Arrays.asList(pair.getValue())))
        .collect(Collectors.toList());

它只是为每个孩子创建一个父/子对,然后为每个对创建一个 new 父,并将单个孩子添加到children字段中。然后将其收集到Parent列表中。