2つのマップがあります
Map<String, String> filterMap
Map<String, Object> filterMapObj
私が必要なのは、それを変換したいMap<String, String>
からMap<String, Object>
。ここで私はコードを使用しています
if (filterMap != null) {
for (Entry<String, String> entry : filterMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
Object objectVal = (Object)value;
filterMapObj.put(key, objectVal);
}
}
それはうまく機能します、マップ内のすべてのエントリを反復することなくこれを行うことができる他の方法はありますか?.
単にputAll
を使用できます:
filterMapObj.putAll(filterMap);
( Javadoc を参照してください。)
追加して編集:上記のメソッドは、マップの要素を繰り返し処理するのとほぼ同等であることに注意する必要があります。コードをきれいにしますが、要素は実際にはパフォーマンスの問題です(たとえば、マップが巨大な場合)。別の可能性は次のように書くことです:
filterMapObj = Collections.<String, Object>unmodifiableMap(filterMap);
filterMap
の変更不可能な「ビュー」を作成します。もちろん、filterMapObj
とfilterMap
を個別に変更することはできないという点で、より制限的です。 (filterMapObj
は変更できません。filterMap
を変更すると、filterMapObj
も影響を受けます。)
これにはワイルドカード演算子を使用できます。 filterMapObj
をMap<String, ? extends Object> filterMapObj
として定義すると、filterMap
を直接割り当てることができます。 generics wildcard operator について学ぶことができます
PutAllメソッドを使用して問題を解決できます。オブジェクトはすべてのオブジェクトの親クラスであるため、変換せずにputAllを使用できます。