我正在尝试将Map转换为另一个Map,其中新键只是原始键toString()。使用流API,我按如下方式执行此操作:
mapMap.entrySet().stream().collect(Collectors.toMap(
(Map.Entry entry) -> entry.getKey().toString(),
(Map.Entry entry) -> entry.getValue()
));
问题是这不会保留内部Map类型。如果原始地图恰好是HashMap,我不介意返回TreeMap,但另一种方法是有问题的,因为删除了元素的排序。我一直在使用上述代码的变体来搞定这个,但我似乎并没有走得太远。现在,我写的没有溪流,如下:
TreeMap<String, Integer> stringMap = new TreeMap<>();
for (OriginalType t: originalMap.keySet()) {
stringMap.put(t.toString(), originalMap.get(t));
}
任何人都可以通过溪流让我朝着正确的方向前进吗? 感谢
答案 0 :(得分:5)
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<>()
));
(关于第三个参数的注释:它的目的是将两个具有相同键的值合并在一起。当我不希望这些事情发生时,我宁愿抛出异常。)