java - 外循环流但收集到内循环对象列表
问题描述
我有一个外循环和内循环。他们看起来像:
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
?
解决方案
只需流过内部List
:
List<InnerObject> result =
innerObjects.stream()
.filter(innerObject -> outerObjects.stream()
.anyMatch(outerObject -> someBooleanMethod(innerObject, outerObject)))
.collect(Collectors.toList());
或者,如果您必须通过外部流式传输List
,则map
每个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());
推荐阅读
- pandas - 在 pandas 中搜索多个问号
- javascript - 我怎样才能设计 MathJsx 工具栏按钮?
- node.js - 通过节点点击测试 .ts 类
- excel - 如果日期范围在某个月份处于活动状态,则 Excel 计数
- c++ - 有效地删除字节数组中的下半字节 - C++
- react-native - 为变量创建存储时出现错误
- java - 如何编辑存储在共享首选项中的自定义对象数组列表中的数据?我正在使用这个类来存储和访问
- reporting-services - 报告变量隐藏表达式的 ReportViewer.Forms SecurityException
- python - 用于非冗余聚类的合成数据生成器
- pyspark - 如何在pyspark中读取excel文件?