我有一个外部和内部循环。 它们看起来像:
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
的列表?
答案 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