Man*_*Joy 8 java arraylist java-8 java-stream
考虑Parent具有属性的类attrib1,attrib2以及List<Child>具有相应的getter和setter的child.
这Child是另一个具有五个属性的类attrib1- attrib5具有相应的getter和setter.
现在我创建了一个List<Parent>父母.然后我想过滤掉List<Parent>以下条件: - Child.Attrib1 > 10;
所以我用Java 8流创建了以下查询.
parent.stream().filter(e -> e.getChild().stream().anyMatch(c -> c.getAttrib1() > 10));
Run Code Online (Sandbox Code Playgroud)
但问题是我会在每个Parent对象中获得所有孩子.在这里,我想只获得那些List<Child>符合给定条件的子对象.
如何删除List中不遵守该条件并获取新列表的所有子对象.
Stream<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列表本身.
| 归档时间: |
|
| 查看次数: |
3408 次 |
| 最近记录: |