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

2022-08-31 10:28:58

假设我有一个.有没有一种简单的方法可以从中获取?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


答案 1

您需要对条目进行流式处理并将其收集到新地图中:

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

答案 2

最简单的方法是:

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

您不能在单行代码中执行此操作的原因是,接口不提供此类操作,您可以获得的最接近该接口的是 ,但该方法规定类型应保持不变。Mapmap.replaceAll


推荐