Cur*_*ity 2 java java-8 java-stream
假设我有以下课程:
class A {
int id;
List<B> b;
}
class B {
int id;
}
Run Code Online (Sandbox Code Playgroud)
我想在 A.id 到 B.id 列表(Map<Integer, List<Integer>>,其中 key = A.id,并List<Integer>对应于每个 A 的 B.id 字段列表)之间创建一个映射。我尝试了Collectors.groupingBy和 的各种组合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;
}));
Run Code Online (Sandbox Code Playgroud)
但是,如果给定的一组 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())));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |