使用Java 8 lambda或stream api过滤列表

Aru*_*run 3 java lambda java-8 java-stream

我的班级结构 -

class A {
    List<B> bList;
}

class B {
   List<C> cList;
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个A类的列表,我想根据c.size()> 0的条件过滤它.我可以使用2 for for a过滤一个列表A和其他列表B但我想知道我可以使用java流api过滤A列表而不用for循环.

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

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);
   }
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 10

是的你可以:

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

这假设您要将每个A过滤器的实例添加到输出List一次.