java - 在 Java 8 中使用 Collectors.toMap 使用 LIst 映射

标签 java collections 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);
    }
}

我使用流尝试了以下代码,但我没有成功。
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;
}

最佳答案

这是 groupingBy 收集器的工作:

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

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

请注意,这将使用 MapList 的一些未指定的实现。目前,它恰好是 HashMapArrayList ,但将来可能会改变。

关于java - 在 Java 8 中使用 Collectors.toMap 使用 LIst 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36783629/

相关文章:

java - 如何在java8中对通用列表进行排序

sql-server-2005 - com/microsoft/sqlserver/jdbc/SQLServerDriver 已由更新版本的 Java 运行时编译

java - 在 Derby 中排序后,如何在除前几行之外的整列上使用 sum 和 avg 等聚合函数

java - GenericItem 是 Hybris 中每个 Item 的默认父级

java - 如何将图像添加到 netbeans Java 项目中

java - 为什么 `weakly consistent iterator`只反射(reflect)修改和删除变化,而不反射(reflect)插入变化

c# - 列表、反射、IEnumerable 和配置问题

java - 拆分仅包含字母的字符串

java - 如何将字符串解析为 List<Dictionary>?

Java 8 : How to parse DayOfWeek with locale set by device