gpt4 book ai didi

java-8 - 使用 streams/collect 转换 Map

转载 作者:行者123 更新时间:2023-12-01 11:20:20 25 4
gpt4 key购买 nike

我正在尝试将一个 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));
}

任何人都可以告诉我正确的方向来用流来做这件事吗?谢谢

最佳答案

有一个 Collectors.toMap 的重载,它允许您指定要返回的 map 类型。

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

(关于第三个参数的注意事项:它旨在作为一个函数,将具有相同键的两个值合并在一起。当我不希望发生这些事情时,我更愿意抛出异常。)

关于java-8 - 使用 streams/collect 转换 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44605070/

25 4 0