【问题标题】:Changing LinkedHashMapValues更改 LinkedHashMap 值
【发布时间】:2023-04-05 03:24:01
【问题描述】:

以下是来自 2 个linkedHashMaps 的数据:

valueMap:   { y=9.0, c=2.0, m=3.0, x=2.0}
formulaMap: { y=null, ==null, m=null, *=null, x=null, +=null, c=null, -=null, (=null, )=null, /=null}

我想要做的是将第一张地图中的值输入到第二张地图中的相应位置。两个地图都以 String,Double 作为参数。

这是我目前的尝试:

for(Map.Entry<String,Double> entryNumber: valueMap.entrySet()){
   double doubleOfValueMap = entryNumber.getValue();
   for(String StringFromValueMap: strArray){
      for(Map.Entry<String,Double> entryFormula: formulaMap.entrySet()){          
         String StringFromFormulaMap = entryFormula.toString();
         if(StringFromFormulaMap.contains(StringFromValueMap)){
           entryFormula.setValue(doubleOfValueMap);
         }
      }
   }
}

这样做的问题是它会将所有值(即 y、m、x、c)设置为最后一个 double 的值。遍历这些值也不起作用,因为这些值的顺序通常与 formulaMap 中的顺序不同。理想情况下我需要说的是如果formulaMap中的字符串与valueMap中的字符串相同,请将formulaMap中的值设置为与valueMap中的值相同。

如果您对我能做什么有任何想法,请告诉我?

【问题讨论】:

    标签: java linkedhashmap setvalue


    【解决方案1】:

    这很简单:

    formulaMap.putAll(valueMap);
    

    如果您的值映射包含 formulaMap 中未包含的键,并且您不想更改原始值,请执行以下操作:

    final Map<String, Double> map = new LinkedHashMap<String, Double>(valueMap);
    map.keySet().retainAll(formulaMap.keySet());
    formulaMap.putAll(map);
    

    因评论而编辑看来问题根本不是我想的那样,所以这里是:

    // The result map
    for (final String key: formulaMap.keySet()) {
        map.put(formulaMap.get(key), valueMap.get(key));
    
    // Either return the new map, or do:
    valueMap.clear();
    valueMap.putAll(map);
    

    【讨论】:

    • 谢谢。我的代码比我的示例复杂得多。目前正在获取当前修改异常。将尝试让它发挥作用。
    • 使用示例代码应该不是问题。集合非常强大;)
    • 谢谢,我已经对我的问题中的代码进行了演示,它正在运行 =D。我的代码中显然存在其他问题。
    • 很抱歉再次提出这个问题,但我不想就同一件事提出另一个问题。您的答案对于我的部分代码非常有效,但是我提出问题的方式使其正确。给定:valueMap { y=9.0, c=2.0, m=3.0, x=2.0}formulaMap { y=dog, m=cat, x=bird, c=mouse} 我想得到valueMap { dog=9.0, mouse=2.0, cat=3.0, bird=2.0} 的输出 这实际上是将valueMap 中的第一个值替换为formulaMap 中的第二个值。如果您有任何想法,请打开一个新答案或添加到您的答案中。问候
    • 好的,编辑了cmets,但是看起来你还有一个问题,这作为一个数据结构看起来很奇怪。
    【解决方案2】:
    for(Map.Entry<String,Double> valueFormula: valueMap.entrySet()){          
      formulaMap.put(valueFormula.getKey(), valueFormula.value());
    }
    

    【讨论】:

    • 谢谢。我的代码比我的示例复杂得多。目前正在获取当前修改异常。将尝试让它发挥作用。
    • 不幸的是我的代码有错误。但是您的解决方案绝对有效。谢谢
    猜你喜欢
    • 2016-01-14
    • 2012-08-10
    • 2018-05-17
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多