我正在寻找一种简洁有效的方法来从使用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 Listchildren; public Parent(){ this.children = new ArrayList (); } public void addChild(Child child){ this.children.add(child); } }
首先,我从某种方法获得Child对象的列表.
孩子可能属于多个父母,可能有父母碰撞.
Listchildren = getChildren();
然后 :
ListuniqueParents = children .stream() .collect(Collectors.groupingBy(Child::getParent)) .keySet() .stream() .collect(Collectors.toList());
所以它有效,但我想避免双流并收集.
这可能直接在一个流中吗?
这个怎么样:
ListuniqueParents = children .stream() .map(Child::getParent) .distinct() .collect(Collectors.toList());