Map<A, List<B>> xFunction() {
Map<A, List<B>> mapList = new HashMap<>();
List<A> aList = x.getAList();
for (A a : aList) {
List<B> bList = getBList(a.getId());
mapList.put(a, bList);
}
return mapList;
}
如何在java 8中使用collect和grouping或映射转换它?
我尝试使用类似的东西:
x.getAList
.stream()
.map(a -> getBList(a.getId)) //return a list of B
.collect(Collectors.groupingBy (...) )
干杯
答案 0 :(得分:6)
您需要Collectors.toMap
:
Map<A, List<B>> map =
x.getAList()
.stream()
.collect(Collectors.toMap (Function.identity(), a -> getBList(a.getId())));
答案 1 :(得分:3)
@Eran是第一个但是为了重现行为,您应该使用toMap
收集器和mergeFunction
来复制a.getId()
,因为默认情况下,Java将为IllegalStateException
的条目投掷x.getAList()
.stream()
.collect(Collectors.toMap(Function.identity(), a -> getBList(a.getId())), (u, u2) -> u2);
键:
-webkit-box