1

キーと値を 1 つのマップ map1 から別のマップ map2 にコピーしようとしています。マップ 1 の値はセットに格納され、マップ 2 はマップ 1 の値をリストに格納する必要があります。それぞれのキーは、両方のマップで同じようにマップする必要があります。

map1 のキーをループしてから、それらのキーをマップ 2 に追加することもできます。また、別の内部 for ループを使用して、各セットの要素を map2 のリストに追加しますが、これが正しい方法であるかどうかはわかりません。正しいです。

public static <K, V> void changeSetToList (Map<K, Set<V>> map1, Map<K, List<V>> map2) {
for (Map.entry<K, Set<V>> entry : m1.keys()) 
  for (List<V> l : m1.values()) 
      m2.put(entry.getKey(), l.getValue());

}

ただし、まだコンパイルもテストもしていません。コンピューターへのアクセスはありません。

4

1 に答える 1

1

新しい ArrayList(Collections)コンストラクターを繰り返しMap使用して、元のマップに保存されているリストからリストを作成できます..そして、それを新しいマップに入れます..Set

    Map<String, Set<String>> givenMap = new HashMap<String, Set<String>>();
    Map<String, List<String>> newMap = new HashMap<String, List<String>>();

    Set<String> newSet = new HashSet<String>();
    newSet.add("rohit");

    givenMap.put("a", newSet);
    givenMap.put("b", newSet);
    givenMap.put("c", newSet);

    for (String str: givenMap.keySet()) {
        newMap.put(str, new ArrayList<String>(givenMap.get(str)));
    }

    for(String str:newMap.keySet()) {
        System.out.println(newMap.get(str));
    }

そして、ジェネリックメソッドを使用したい場合..メソッドを次のように変更する必要があります: -

public static <K, V> void changeSetToList (Map<K, Set<V>> givenMap, 
        Map<K, List<V>> newMap) {

    for (K str: givenMap.keySet()) {
        newMap.put(str, new ArrayList<V>(givenMap.get(str)));
    }

    for(K str:newMap.keySet()) {
        System.out.println(newMap.get(str));
    }
}
于 2012-10-08T08:28:11.600 に答える