使用流/集合来转换地图



我正在尝试将一个地图转换为另一个地图,其中新键只是原始键toString((。使用流 API,我按如下方式执行此操作:

    mapMap.entrySet().stream().collect(Collectors.toMap(
            (Map.Entry entry) -> entry.getKey().toString(),
            (Map.Entry entry) -> entry.getValue()
    ));

问题是这不会保留内部 Map 类型。如果原始地图恰好是 HashMap,我不介意返回树状图,但反过来是一个问题,因为元素的排序被删除了。我一直在玩弄上述代码的变体来完成这项工作,但我似乎并没有走得太远。现在,我已经在没有流的情况下编写了它,如下所示:

    TreeMap<String, Integer> stringMap = new TreeMap<>();
    for (OriginalType t: originalMap.keySet()) {
        stringMap.put(t.toString(), originalMap.get(t));
    }

谁能让我朝着正确的方向来用流做到这一点?谢谢

存在

Collectors.toMap重载,允许您指定要返回的映射类型。

mapMap.entrySet().stream().collect(Collectors.toMap(
        (Map.Entry entry) -> entry.getKey().toString(),
        (Map.Entry entry) -> entry.getValue(),
        (val1, val2) -> { throw new RuntimeException("Not expecting duplicate keys"); },
        () -> new TreeMap<>()
));

(关于第三个参数的说明:它旨在作为一个函数,它将具有相同键的两个值合并在一起。 当我不希望这些事情发生时,我宁愿抛出一个例外。

最新更新