如何在Java 8中映射地图中的值?

时间:2014-04-22 08:04:04

标签: java map lambda java-8

说我有Map<String, Integer>。是否有一种从中获取Map<String, String>的简单方法?

简单来说,我的意思是不喜欢这样:

Map<String, String> mapped = new HashMap<>();
for(String key : originalMap.keySet()) {
    mapped.put(key, originalMap.get(key).toString());
}

而是一些像衬里一样的衬里:

Map<String, String> mapped = originalMap.mapValues(v -> v.toString());

但显然没有方法mapValues

2 个答案:

答案 0 :(得分:95)

您需要流式传输条目并在新地图中收集它们:

Map<String, String> result = map.entrySet().stream()
                  .collect(Collectors.toMap(Entry::getKey, e -> String.valueOf(e.getValue()));

答案 1 :(得分:20)

最简单的方法是:

Map<String, Integer> map = new HashMap<>();
Map<String, String> mapped = map.entrySet().stream()
        .collect(Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue())));

你在这里做的是:

  1. 获取Stream<Map.Entry<String, Integer>>
  2. 在结果地图中收集结果:
    1. 将条目映射到其密钥。
    2. 将条目映射到新值,并合并String.valueOf
  3. 你不能在单行中执行此操作的原因是因为Map接口不提供此类,因此最接近的是map.replaceAll,但该方法指示类型应该保持不变。