多级列表过滤Java 8



我正在使用具有多级深度的类。我试图在内部深度过滤,但我正在收到错误

Bad return type in lambda expression: Stream<InnerClassName> cannot be converted to boolean 

我的课程是

class A {
    List<B> B;
    Integer Id;
}
class B {
        List<C> C;
        Integer Id;
    }

class C {                    
         Integer Id;
        }

如果我的列表称为AList我尝试做

AList.getBlist().stream().filter(bList -> bList.getId.equals(5));

效果很好。我要完成的工作是用Class C中的值进行过滤,该值可以通过Blist.getClist

获得

如果您要过滤List<A>的内容并获得与输出相同的格式,则可以执行以下操作:

List<A> output = aList.stream()
        .filter(a -> a.getBList().stream() // bList from a
                .flatMap(b -> b.getCList().stream()) // cList from each b
                .anyMatch(c -> c.getId() == 5)) // equals(5)
        .collect(Collectors.toList());

上述代码过滤器中所有来自List<A>的" A"中的过滤器,使得在匹配给定条件的List<B>的任何" B"部分中的List<C>的任何" C"部分。

最新更新