web-dev-qa-db-ja.com

Map <String、String>からMap <String、Object>への変換

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);
            }
        }

それはうまく機能します、マップ内のすべてのエントリを反復することなくこれを行うことができる他の方法はありますか?.

36
arjuncc

単にputAllを使用できます:

filterMapObj.putAll(filterMap);

Javadoc を参照してください。)

追加して編集:上記のメソッドは、マップの要素を繰り返し処理するのとほぼ同等であることに注意する必要があります。コードをきれいにしますが、要素は実際にはパフォーマンスの問題です(たとえば、マップが巨大な場合)。別の可能性は次のように書くことです:

filterMapObj = Collections.<String, Object>unmodifiableMap(filterMap);

filterMapの変更不可能な「ビュー」を作成します。もちろん、filterMapObjfilterMapを個別に変更することはできないという点で、より制限的です。 (filterMapObjは変更できません。filterMapを変更すると、filterMapObjも影響を受けます。)

42
ruakh

これにはワイルドカード演算子を使用できます。 filterMapObjMap<String, ? extends Object> filterMapObjとして定義すると、filterMapを直接割り当てることができます。 generics wildcard operator について学ぶことができます

9
Prasad Kharkar

PutAllメソッドを使用して問題を解決できます。オブジェクトはすべてのオブジェクトの親クラスであるため、変換せずにputAllを使用できます。

1
PengPeng.Xu