Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java8中映射映射中的值?_Java_Map_Lambda_Java 8 - Fatal编程技术网

如何在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我甚至在我的评论中解释了这一点。