Java8:按键映射对象列表

时间:2017-10-09 07:50:13

标签: java java-8 java-stream

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 (...) )

干杯

2 个答案:

答案 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