首页 > 解决方案 > Java 8 嵌套列表作为父项中的单例列表

问题描述

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 中的流 api 来实现这一点,您能否建议避免并发修改异常的最佳方法?

标签: javaarraylistjava-8java-stream

解决方案


这应该这样做:

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

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


推荐阅读