【问题标题】:Convert Map<Integer, String> to Map<String, String>将 Map<Integer, String> 转换为 Map<String, String>
【发布时间】:2019-04-15 02:33:00
【问题描述】:

我想把地图转换成地图

到目前为止我在下面尝试过

Map<Integer, String> inMap = new HashMap();
        inMap.put(100, "Test1");
        inMap.put(101, "Test2");
        inMap.put(102, "Test3");

如何在 Entry::getKey 上应用 String.valueOf()?

    Map<String, String> collect = inMap.entrySet().stream().collect(Collectors.toMap(Entry::getKey, Entry::getValue));  //how to apply String.valueOf() on Entry::getKey

这是有效的

    Map<String, String> map1 = inMap.entrySet().stream().collect(Collectors.toMap(entry -> String.valueOf(entry.getKey()), Map.Entry::getValue, (a, b) -> b)); //Working

为什么 String.valueOf(entry.getKey()), entry.getValue() 即使它的 biFunctional 也不起作用?

    Map<String, String> map2 = inMap.entrySet().stream().collect(Collectors.toMap(entry -> String.valueOf(entry.getKey()), entry.getValue()));  //

【问题讨论】:

  • 因为它被解析为entry -&gt; String.valueOf(entry.getKey())entry.getValue()

标签: java java-8 java-stream


【解决方案1】:

你也可以使用toString(),因为在所有包装类中toString()被重写为返回值

 Map<String, String> collect = inMap.entrySet()
                                    .stream()
                                    .collect(Collectors.toMap(entry->entry.getKey().toString(), Entry::getValue));

【讨论】:

    【解决方案2】:

    因为entry.getValue() 不是Functionentry -&gt; entry.getValue() 是。

    Map<String, String> map = inMap.entrySet()
                                   .stream()
                                   .collect(Collectors.toMap(entry -> String.valueOf(entry.getKey()), entry -> entry.getValue()); // should work
    

    或者您可以简单地将forEach 用作:

    Map<String, String> outMap = new HashMap<>();
    inMap.forEach((k, v) -> outMap.put(k.toString(), v));
    

    【讨论】:

    • map2.put(k.toString(),v)); 看起来非常直观。
    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多