gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:57:53 24 4
gpt4 key购买 nike

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

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 列表而不是 InnerObjects 列表。

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

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

最佳答案

只需流式传输内部列表:

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

或者,如果您必须通过外部List进行流式传输,请将每个OuterObject映射到第一个匹配的InnerObject:

List<InnerObject> result = 
outerObjects.stream()
.map(outerObject -> innerObjects.stream()
.filter(innerObject -> someBooleanMethod(innerObject, outerObject))
.findFirst()
.orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());

关于java - 外循环的流,但收集到内循环对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52855713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com