使用Java8Lambda或流api的过滤器列表

使用Java8Lambda或流api的过滤器列表,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我的班级结构- class A { List<B> bList; } class B { List<C> cList; } List<A> result = = new ArrayList<>(); for (A a : aList) { List<B> tempBList = = new ArrayList<>(); for (B b : a.getBList) { if (b.

我的班级结构-

class A {
    List<B> bList;
}

class B {
   List<C> cList;
}
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);
   }
}
A类{
列表列表;
}
B类{
列表cList;
}
现在我有一个类a的列表,我想根据c.size()>0的条件对其进行过滤。我可以使用2 for循环对其进行过滤,一个用于列表A,另一个用于列表B,但我想知道我是否可以在不使用for循环的情况下使用java流api对列表A进行过滤

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

class A {
    List<B> bList;
}

class B {
   List<C> cList;
}
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);
   }
}
List result==new ArrayList();
为了(A:A){
List tempBList==new ArrayList();
for(B:a.getBList){
如果(b.getCList.size()>0){
临时列表。添加(b);
}
}
如果(tempBList.size()>0){
a、 受挫名单(临时名单);
结果.添加(a);
}
}
是的,您可以:

List<A> result =
    listOfA.stream()
           .filter(a -> a.b.stream().anyMatch(b -> b.c.size() > 0))
           .collect(Collectors.toList());
列出结果=
listOfA.stream()
.filter(a->a.b.流().anyMatch(b->b.c.大小()>0))
.collect(Collectors.toList());

这是假设您希望添加将该过滤器传递到输出
列表的
A
的每个实例一次

试试这个。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());
List result=new ArrayList();
结果=items.stream().filter(a->a.b.stream().filter(b->b.c.size()>0.count()>0.collector(Collectors.toList());

你可能忘了放一个
断点结果后的语句。添加(a)在您的example@lino没有什么可打破的。他需要收集与给定谓词匹配的所有
A
实例。不要像这样添加虚假的注释。@RavindraRanwala目前为每个符合条件
b.c.size()>0
b
添加一个
a
实例。这看起来像是打字错误me@Lino不,那不是打字错误,那是他需要的。“他使用公共领域而不是getters。”“拉文德拉兰瓦拉,我想我们是在一起交谈的。”<代码>a.b
是一个
列表
。OP迭代该列表。然后检查项目
b
的列表
b.c
是否大于0。如果是,则在结果中添加
a
。当前代码对每个
b
执行此操作。这意味着可能有多个相同的
a
实例出现在结果列表中。使用
count()
非常有趣。但是请记住,
filter(..).count(..)>0将贯穿整个
A
s流。使用
anyMatch()
将产生相同的结果,但当它找到一个
A
C
s时就会停止,这使得它更加高效。