如何在Java8中映射映射中的值?
假设我有一张如何在Java8中映射映射中的值?,java,map,lambda,java-8,Java,Map,Lambda,Java 8,假设我有一张地图。有没有一种简单的方法可以从中获取地图 简单,我的意思不是这样: Map<String, String> mapped = new HashMap<>(); for(String key : originalMap.keySet()) { mapped.put(key, originalMap.get(key).toString()); } Map-mapped=newhashmap(); for(字符串键:originalMap.keySet(
地图
。有没有一种简单的方法可以从中获取地图
简单,我的意思不是这样:
Map<String, String> mapped = new HashMap<>();
for(String key : originalMap.keySet()) {
mapped.put(key, originalMap.get(key).toString());
}
Map-mapped=newhashmap();
for(字符串键:originalMap.keySet()){
mapped.put(key,originalMap.get(key.toString());
}
而是像这样的一行:
Map<String, String> mapped = originalMap.mapValues(v -> v.toString());
Map-mapped=originalMap.mapValues(v->v.toString());
但是显然没有方法
mapValues
您需要流式传输条目并在新的映射中收集它们:
Map<String, String> result = map.entrySet()
.stream()
.collect(Collectors.toMap(Entry::getKey, e -> String.valueOf(e.getValue()));
Map result=Map.entrySet()
.stream()
.collect(Collectors.toMap(Entry::getKey,e->String.valueOf(e.getValue()));
最简单的方法是:
Map<String, Integer> map = new HashMap<>();
Map<String, String> mapped = map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue())));
Map Map=newhashmap();
Map mapped=Map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,Entry->String.valueOf(Entry.getValue()));
您在这里所做的是:
流
String.valueOf
你不能在一行程序中完成它的原因是,
Map
界面不提供这样的功能,你能找到的最接近的功能是Map.replaceAll
,但该方法要求类型保持不变。是的,它是重复的。对不起,我更喜欢它,它甚至是一行(技术上).+1请注意,链接副本的答案包括使用番石榴的替代解决方案:Map byNameMap=Maps.transformValues(people,Person::getName);
“它包装原始地图,并在执行get时进行转换,这意味着您仅在实际消费价值时支付转换成本。”此答案不正确,因为它误解了原始问题,特别是问题中第一行的目的,Map-mapped=new HashMap()
。接受的答案不会误解问题,并显示了如何在一行中实现这一点。@Stephenharison这是错误的。我们在概念上都有相同的答案。我只显示了Map=new HashMap();
指示原始映射的源。您的代码创建一个空映射map
和一个流()
在入口集上,该入口集保证为空。您的代码按原样创建了两个映射映射
和映射
都为空。运行您的代码以找出原因。@StephenHarrison我知道这一点。我添加空映射部分是为了指示输出映射的源。您不能编写代码样本并拥有一个un定义了其中的变量。@StephenHarrison我甚至在我的评论中解释了这一点。