使用Java 8中的Collectors.toMap映射LIst

kar*_*raj 3 collections lambda java-8 java-stream collectors

我喜欢将下面的代码转换为java流,

HashMap<String, List<Data>> heMap = new HashMap<String, List<Data>>();
for (Data heData : obj) {
    String id = heData.getData().getId() + heData.getPlanData().getCode()
            + heData.getPlanData().getId();
    if (!heMap.containsKey(id)) {
        CitizenHElist = new ArrayList<Data>();

        CitizenHElist.add(heData);
        heMap.put(id, CitizenHElist);

    } else {
        heMap.get(id).add(heData);
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用流尝试了下面的代码,但我没有成功.

heMap=obj.stream().collect(Collectors.toMap(t->getKey(t), obj.stream().collect(Collectors.toList())));

private String getKey(Data heData){
    String id = heData.getData().getId() + heData.getPlanData().getCode()
                    + heData.getPlanData().getId();
    return id;
}
Run Code Online (Sandbox Code Playgroud)

Mis*_*sha 11

这是groupingBy收藏家的工作:

import static java.util.stream.Collectors.groupingBy;

Map<String, List<Data>> heMap = obj.stream().collect(groupingBy(d -> getKey(d)));
Run Code Online (Sandbox Code Playgroud)

请注意,这会使用一些非特定的实现MapList.目前,它恰好是HashMapArrayList,但未来可能会发生变化.