java - 如何创建地图在使用 Java 流的第一个和最后一个嵌套对象之间?
问题描述
假设我有以下课程:
class A {
int id;
List<B> b;
}
class B {
int id;
}
我想在 A.id 到 B.id 列表之间创建一个映射(Map<Integer, List<Integer>>
其中 key = A.id
,并且List<Integer>
对应于每个 A 的 B.id 字段列表)。Collectors.groupingBy
我尝试了and的各种组合Collectors.mapping
,但没有效果。有人可以帮帮我吗?
解决方案
您可以使用toMap
带有合并功能的收集器来解决此问题。这是它的外观。
Map<Integer, List<Integer>> resultMap = aList.stream()
.collect(Collectors.toMap(A::getId,
a -> a.getB().stream().map(B::getId)
.collect(Collectors.toList()), (l1, l2) -> {
l1.addAll(l2);
return l1;
}));
但是,如果给定的一组 A 对象具有不同的 id 值,那么您可以只省去合并函数,这是toMap
收集器的第三个参数。这是简化版。
Map<Integer, List<Integer>> resultMap = aList.stream()
.collect(Collectors.toMap(A::getId,
a -> a.getB().stream().map(B::getId)
.collect(Collectors.toList())));
推荐阅读
- php - How to upload video files in Laravel?
- ios - 将 AVAsset 导出到临时 iOS 路径时 AVAssetExportSession 抛出错误
- javascript - React 渲染 FusionChart 使用 API Rest
- python - 将(在 Pandas 中)应用于多列
- python - 缩短异常的堆栈跟踪?
- python - 我的 for 循环和 while 循环在特定数字处停止
- javascript - 通过 Meteor 返回 blob 总是导致空对象
- wordpress - 帖子标题高度根据文本长度而变化
- ansible - Ansbile 从任务输出中获取子字符串
- django-queryset - 联合查询集未给出预期结果,是 Django ORM 错误吗?