我正在与多层次深度的类一起工作。我正在尝试过滤内部深度,但收到错误

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'进行过滤,以使A中List<C>的任何'B'部分中的List<B>的任何'C'部分都匹配给定条件。

10-08 00:36