流分组:子列表到唯一的父列表

sin*_*ge3 0 java collections java-stream

我正在寻找一种简洁有效的方法来从使用Java 8流的子项列表中获取唯一父项列表.

对于示例,我有两个简单的类:

public class Child{
  private Parent parent;
  public Child(Parent parent){
    this.parent = parent;
  }
  public Parent getParent(){
    return this.parent;
  }
}

public class Parent{
  private List<Child> children;
  public Parent(){
    this.children = new ArrayList<Child>();
  }
  public void addChild(Child child){
    this.children.add(child);
  }
}
Run Code Online (Sandbox Code Playgroud)

首先,我从某种方法获得Child对象的列表.
孩子可能属于多个父母,可能有父母碰撞.

List<Child> children = getChildren();
Run Code Online (Sandbox Code Playgroud)

然后 :

List<Parent> uniqueParents = children
  .stream()
  .collect(Collectors.groupingBy(Child::getParent))
  .keySet()
  .stream()
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

所以它有效,但我想避免双流并收集.

这可能直接在一个流中吗?

Tho*_*ger 5

这个怎么样:

List<Parent> uniqueParents = children
    .stream()
    .map(Child::getParent)
    .distinct()
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)