考虑一个 Parent
具有属性 attrib1
的类, attrib2
和 List<Child>
子级及其相应的 getter 和 setter。
Child
是另一个具有五个属性的类 attrib1
- attrib5
及其相应的 getter 和 setter。
现在我创建了一个 List<Parent>
parent 。然后我想过滤掉一个List<Parent>
具有以下条件:- Child.Attrib1 > 10
;
所以我通过 Java 8 流创建了以下查询。
parent.stream().filter(e -> e.getChild().stream().anyMatch(c -> c.getAttrib1() > 10));
但问题是我会得到每个 Parent
中的所有 child 目的。在这里我只想获取 List<Child>
中的那些子对象满足给定条件。
我应该如何移除List中所有不符合条件的子对象并得到新的List。
最佳答案
您需要的是 Stream<Child>
如果你想接收所有的 child 。以下表达式可能会起作用:
parents.stream().flatMap(e -> e.getChildren().stream()).filter(c -> c.getAttrib1() > 10)
这应该返回列表中 get 属性值大于 10 的所有父项的所有子项。
如果你想通过删除所有不符合条件的子元素来更新父列表,你可以执行以下操作:
parents.forEach(p -> p.getChildren().removeIf(c -> c.getAttrib1() > 10));
这不会创建新列表。相反,它更新了 parents
列出自己。
关于java - 使用 Java 8 Streams 从列表中仅获取所需的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32132387/