将嵌套的循环转换为流

时间:2016-04-20 13:13:04

标签: 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);
        }
    }
}

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

1 个答案:

答案 0 :(得分:7)

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

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