2

以下は、2 つの linkedHashMap からのデータです。

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}

私がやりたいことは、最初のマップの値を2番目のマップの対応する位置に入力することです。どちらのマップも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 と同じ値に設定する必要があります。

私にできることについて何かアイデアがあれば教えてください。

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 に答える