java - 使用 Java 8 Streams 从列表中仅获取所需的对象

标签 java arraylist java-8 java-stream

考虑一个 Parent具有属性 attrib1 的类, attrib2List<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/

相关文章:

java - 将 MathContext 设置为 BinaryOperator 引用方法

java - 使用 Homebrew 安装适用于 Mac 的 OpenJDK 8(子版本 1.8.0.119)?

java - 日历,传递 ArrayList<HashMap,并迭代它

java - 在 Scala 中委托(delegate) java.util.List#toArray(T[] a)

java - 在同一个包中编译两个类

java - Android:如何将位图图像传递到 ArrayList<Bitmap> 并检索它

java - 如何将 String ArrayList 转换为 Double ArrayList 并计算值的总和?

java - JDK8 - 尝试使用 Maven javadoc 插件生成 javadoc 时出现错误 "class file for javax.interceptor.InterceptorBinding not found"

java - 从数据库中的多个表中检索数据

JAVA:如何使用扫描仪向字符串数组输入未定义数量的值?