如何使用分组映射流?

Jin*_*won 3 java mapping java-stream

我有很长的孩子.

// ordered by parent.id / child.id
Stream<Child> childStream;
Run Code Online (Sandbox Code Playgroud)

说,

Child(id = 1, parent(id = 1))
Child(id = 2, parent(id = 1))
Child(id = 3, parent(id = 2))
Child(id = 4, parent(id = 2))
Child(id = 5, parent(id = 3))
Run Code Online (Sandbox Code Playgroud)

每个人Child都有父母.

class Child {
    Parent parent;
}
Run Code Online (Sandbox Code Playgroud)

现在,我如何将流映射到一个流Family

class Family {
    Parent parent;
    List<Child> children;
}
Run Code Online (Sandbox Code Playgroud)

我已经知道了Collectors.groupingBy,但是流很长,将它们全部收集到一个中Map是不适用的.

Era*_*ran 6

要将Child实例分组到Family实例中,必须处理Stream,因此需要终端操作.您可以使用groupingBy然后将结果Map转换为Stream您需要的:

Stream<Family> families = 
    childStream.collect(Collectors.groupingBy(Child::getParent))
               .entrySet()
               .stream()
               .map(entry -> new Family(entry.getKey(),entry.getValue()));
Run Code Online (Sandbox Code Playgroud)

这假设你的Family类有一个Family(Parent parent, List<Child> children)构造函数.