外循环流,但收集到内循环对象列表

时间:2018-10-17 13:10:21

标签: java java-stream

我有一个外部和内部循环。 它们看起来像:

List<InnerObject> result = new ArrayList<>(innerObjects.size());
        for (OuterObject outerObject : outerObjects) {
            for (InnerObject innerObject : innerObjects) {
                if (someBooleanMethod(innerObject, outerObject)) {
                    result.add(innerObject);
                    break;
                }
            }
        }

您可以看到,对于每个外部对象,我都会遍历内部列表并检查项目,如果通过检查将它们相等,则会将内部对象添加到结果列表中。

我想使用Stream API重写它,但是遇到一个无法将其收集到内部对象列表中的问题。

下面的解决方案几乎可以正常工作,但是它创建了一个OuterObjects列表,而不是Inner。

  List<OuterObject> result = outerObjects.stream()
                    .filter(outerObject -> innerObjects().stream()
                            .anyMatch(innerObject -> someBooleanMethod(innerObject, outerObject).
                    .collect(Collectors.toList());

如何重写它以获得InnerObjects的列表?

1 个答案:

答案 0 :(得分:1)

只需流过内部List

List<InnerObject> result = 
    innerObjects.stream()
                .filter(innerObject -> outerObjects.stream()
                                                   .anyMatch(outerObject -> someBooleanMethod(innerObject, outerObject)))
                .collect(Collectors.toList());

或者如果您必须流过外部List,则将每个map的{​​{1}}流到第一个匹配的OuterObject

InnerObject