多级列表过滤Java 8

时间:2019-02-19 13:47:00

标签: java java-8 java-stream

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

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内部值进行过滤

1 个答案:

答案 0 :(得分:3)

如果您尝试过滤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<C>List<B>的任何'C'部分与A中的{provide: MatDialog, useClass: MatDialogMock} // Add this in the providers array export class MdDialogMock { // When the component calls this.dialog.open(...) we'll return an object // with an afterClosed method that allows to subscribe to the dialog result observable. open() { return { afterClosed: () => Observable.of({}) }; } }; 的任何'B'部分都匹配给定条件。