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

我有一个嵌套的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

最佳答案

您可以使用flatMap获取所有Stream<ObjectB>实例的ObjectB并过滤所需编号的ObjectB

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

10-06 16:11