2017-12-04 4 views
3
public class MapCheck { 
    public static void main(String[] args) { 
     Map<String, String> data = new HashMap<String, String>(); 
     data.put("John", "Taxi Driver"); 
     data.put("Mark", "Professional Killer"); 
     Map<String, String> data1 = new HashMap<String, String>(); 
     data1.put("John", "Driver"); 
     data1.put("Mark", "Murderer"); 
     Map<String, String> data3 = new HashMap<String, String>(); 
     data3.putAll(data); 
     data3.putAll(data1); 
     System.out.println(data3); 
    } 
} 

同じキーを含むマップはほとんどありません。その値は異なります。私はそれらをマージしたい。しかし、私はそれらを通常のputAll()とマージすると、それは私に最新のものが挿入されたキーの値だけを与えます。上記のコードからマップをマージして値を配列にする

出力は私のキーに関連付けられているすべての値を取得し、あなたが非常に簡単にMap<String, List<String>>を生成することができます

答えて

5

ような配列として私を与える方法があります{John=Driver, Mark=Murderer}

ですJavaの8とStream S:

Map<String, List<String>> 
    merged = 
     Stream.of(data,data1) // create a Stream<Map<String,String> of all Maps 
       .flatMap(map->map.entrySet().stream()) // map all the entries of all the 
                // Maps into a 
                // Stream<Map.Entry<String,String>> 
       .collect(Collectors.groupingBy(Map.Entry::getKey, // group entries by key 
              Collectors.mapping(Map.Entry::getValue, 
                   Collectors.toList()))); 

出力Map

2

何かこれは何ですか?

void add(String key, String value, Map<String,List<String>> map) { 
    List<String> list = map.get(key); 
    if (list == null) { 
     list = new ArrayList<>(); 
     map.put(key, list); 
    } 
    list.add(value); 
} 
1

Map<String, <ArrayList<String>>を作成するとよいでしょう。これにより、1つのキーに関連付けられた複数の値を格納できます。

あなたが指定されたマップ内の固有キーに関連付けられた複数の値を格納し提供する方法作成することを検討可能性があります最良の選択かもしれ

public static void add(String key, String value, Map<String, List<String>> map) { 
     // Here you create a refeREnce to instance of the list storing values associated with given key: 
     List<String> listOfValues = map.get(key); 
     // If given key was already present in the map... 
     if(listOfValues != null) { 
      // Add given value to list of values associated with given key: 
      listOfValues.add(value); 
     // If given key wasn't present in the map... 
     } else { 
      // Initialize an ArrayList that will store given value in the map: 
      listOfValues = new ArrayList<>(); 
      // Put new entry into the given map (given key and to-be-filled list of values: 
      map.put(key, listOfValues); 
      // Put given value to the list of values associated with given key 
      listOfValues.add(value); 
     } 
} 
関連する問題