合并地图并将值设为数组

Mel*_*ard 3 java arrays collections

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我有几个包含相同键的地图,它们的值不同.我想合并他们.但是当我将它们与通常合并时,putAll()它只给出了最新插入的键的值.

上面代码的输出是 {John=Driver, Mark=Murderer}

有没有一种方法可以获得与键相关的所有值,并将其作为数组给出

{John=[Taxi Driver, Driver], Mark=[Professional Killer, Murderer]}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

Map<String, List<String>>使用Java 8 可以很容易地生成Stream:

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())));
Run Code Online (Sandbox Code Playgroud)

输出Map:

{John=[Taxi Driver, Driver], Mark=[Professional Killer, Murderer]}
Run Code Online (Sandbox Code Playgroud)