将嵌套的循环转换为流

kum*_*ar5 1 java java-8 java-stream

我在理解流时遇到了一些麻烦.我环顾四周,似乎无法找到与我的用例匹配的示例.

我有一个现有的嵌套for循环:

List<ObjectB> objectBs = new ArrayList<ObjectB>();
for (ObjectA objA: objectAList) {
    for (ObjectB objB: objA.getObjectBList()) {
        if (objB.getNumber() != 2) {
            objectBs.add(objB);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

很多示例显示如何添加objB.getNumber()到列表但不是objB.

Era*_*ran 7

您可以使用flatMap获取Stream<ObjectB>所有ObjectB实例中的一个并过滤ObjectB所需数量的实例:

List<ObjectB> objectBs = 
    objectAList.stream()
               .flatMap (a -> a.getObjectBList().stream())
               .filter (b -> b.getNumber() != 2)
               .collect (Collectors.toList());
Run Code Online (Sandbox Code Playgroud)