使用Java 8 lambda或流api的过滤器列表

时间:2018-06-22 07:59:19

标签: java lambda java-8 java-stream

我的课程结构-

class A {
    List<B> bList;
}

class B {
   List<C> cList;
}

现在我有一个类A的列表,我想根据c.size()> 0的条件对其进行过滤。我可以使用2来过滤它,其中一个用于列表A,另一个用于列表B,但是我想知道我可以使用不带for循环的java流api过滤A的列表。

我当前的代码(更新的代码)-

List<A> result = = new ArrayList<>();
for (A a : aList) {
   List<B> tempBList = = new ArrayList<>();
   for (B b : a.getBList) {
       if (b.getCList.size() > 0) {
          tempBList.add(b);
       }
   }

   if (tempBList.size() > 0) {
       a.setBList(tempBList);
       result.add(a);
   }
}

2 个答案:

答案 0 :(得分:10)

是的,您可以:

List<A> result =
    listOfA.stream()
           .filter(a -> a.b.stream().anyMatch(b -> b.c.size() > 0))
           .collect(Collectors.toList());

这是假设您要添加每个将过滤器传递到输出A的{​​{1}}实例。

答案 1 :(得分:1)

尝试一下。 items是要过滤的列表。

    List<A> result = new ArrayList<>();

    result = items.stream().filter(a -> a.b.stream().filter(b -> b.c.size() > 0).count() > 0).collect(Collectors.toList());