将Map<Integer, String>转换为Map<String, String>

4
我想将 Map 转换为 Map。
目前我尝试了以下方法。
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()无法使用,即使它是双重功能的?
    Map<String, String> map2 = inMap.entrySet().stream().collect(Collectors.toMap(entry -> String.valueOf(entry.getKey()), entry.getValue()));  //

因为它被解析为 entry -> String.valueOf(entry.getKey())entry.getValue() - user2956272
2个回答

3

因为entry.getValue()不是一个Function,而entry -> 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)); 看起来非常直观。 - Vishwa Ratna

3

您还可以使用toString()。因为在所有包装器类中,toString()都被重写以返回值。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接