【问题标题】:Keeping order on hash map keys during collecting them [duplicate]在收集它们时保持哈希映射键的顺序[重复]
【发布时间】:2017-08-28 12:40:29
【问题描述】:

我有以下哈希映射

Map<String,Double> map_1 = new LinkedHashMap<>();

带有一些键:例如[“hello_1”、“hello_2”、“hello_3”]。

然后,我使用流 API 遍历这些键并将新结果保存在 map2 中:

 Map<String,Double> map_2 = new LinkedHashMap<>();
 map_2 = map_1.keySet()
                .stream()
                .collect(
                        Collectors.toMap(entry -> entry, 
                                entry -> {
                                     Double value = map_1.get(entry);
                                     return (value + 5);
                                }));

但是新的散列映射有另一个顺序的键,尽管它被定义为 LinkedHashMap。我认为问题出在流 + 收集步骤期间。

谁能给我一个解决方案? 谢谢

【问题讨论】:

  • LinkedHashMap 实例初始化map_2 是没有意义的,当为map_2 变量分配新值时,您将用完全不同的对象覆盖它。顺便说一句,如果您想将5 添加到Map 的所有值中,您可以简单地使用map_1.replaceAll((key,value) -&gt; value+5); 就地完成。如果您还需要第二张地图,Map&lt;String,Double&gt; map_2=new LinkedHashMap&lt;&gt;(map_1); map_2.replaceAll((key,value) -&gt; value+5); 可以做到。
  • map_1.keySet() .stream() .collect( Collectors.toMap(entry -> entry, entry -> map_1.get(entry) +5, (e1,e2)-> e1, LinkedHashMap::new));

标签: java java-8 hashmap java-stream linkedhashmap


【解决方案1】:

在这种情况下,键的顺序实际上在收集步骤中被弄乱了。

您需要指定要收集到LinkedHashMap

【讨论】:

  • 你能解释一下我必须说明什么吗?
猜你喜欢
  • 2010-12-26
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 2016-01-26
  • 2017-03-17
  • 2014-04-18
  • 2017-01-05
  • 1970-01-01
相关资源
最近更新 更多