Java 8中列表的两级过滤

时间:2018-03-21 12:34:57

标签: java java-8 java-stream

我有一个aList类对象列表A。此aList是另一个列表bList的每个元素b的成员。每个元素b都是类B。类B的结构如下:

class B {
    String status;
    String name;
}

班级A的结构如下:

class A {
    List<B> bList;
    String status;
}

现在我想按如下方式过滤aList

最终列表aListResult应仅包含对象a,如果a.status =&#34; Active&#34;以及每个&#34; Active&#34; aList的a应该只包含bList&#34; Active&#34; b对象,即如果b将在关联的bList中,当且仅当b.status == Active时。

如何在Java 8中实现这一点,我无法弄清楚。

1 个答案:

答案 0 :(得分:9)

我假设您希望输出列表仅包含所有关联的B实例都处于活动状态的活动A实例:

List<A> aList = ...;
List<A> aListResult = 
    aList.stream()
        .filter(a -> a.getStatus().equals("Active"))
        .filter(a -> a.bList.stream().allMatch(b -> b.getStatus().equals("Active")))
        .collect(Collectors.toList());