2017-12-04 2 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); 
    } 
} 

Ich habe einige Karten, die gleichen Schlüssel enthält, sind ihre Werte unterschiedlich. Ich möchte sie zusammenführen. Aber wenn ich sie mit dem üblichen putAll() zusammenführe, gibt es mir nur den Wert des Schlüssels, der zuletzt eingefügt wurde.Zusammenführen Karten und Werte als Array

Ausgabe von oben Code ist {John=Driver, Mark=Murderer}

Gibt es eine Methode, die mich mit dem Schlüssel verknüpft alle Werte erhalten und geben Sie mir als Array wie

Antwort

5

Sie eine Map<String, List<String>> ganz leicht produzieren kann mit 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()))); 

Der Ausgang Map:

2

So ähnlich?

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

Sie können Map<String, <ArrayList<String>> erstellen. Auf diese Weise können Sie mehrere Werte speichern, die einem Schlüssel zugeordnet sind.

Sie können prüfen, Verfahren zu schaffen, die in bestimmten Karte mehrere Werte zugeordnet eindeutigen Schlüssel liefert Speicherung:

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