Вложенный список Java 8 как одноэлементный список в родительском - PullRequest
0 голосов
/ 04 марта 2019
public class Parent {
    String name;
    List<Child> children;
}

public class Child {
    String childName;
}

У меня есть эти 2 класса, с помощью которых мой набор данных становится следующим:

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"]}
]

Я хочу разбить вложенный список на одноэлементный вложенный список, основная цель - добиться этого с помощью API-потоков из Java 8, а также можете ли вы предложить лучший подход для исключения исключения concurrentModification?

1 Ответ

0 голосов
/ 04 марта 2019

Это должно сделать:

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.

...