2

以下是来自 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中的字符串与valueMap中的字符串相同,请将formulaMap中的值设置为与valueMap中相同的值。

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

4

2 回答 2

4

这很简单:

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);
于 2013-01-19T15:13:07.330 回答
1
for(Map.Entry<String,Double> valueFormula: valueMap.entrySet()){          
  formulaMap.put(valueFormula.getKey(), valueFormula.value());
}
于 2013-01-19T15:13:14.377 回答