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)
所以它有效,但我想避免双流并收集.
这可能直接在一个流中吗?
这个怎么样:
List<Parent> uniqueParents = children
.stream()
.map(Child::getParent)
.distinct()
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
990 次 |
最近记录: |