So konvertieren Sie List <Map <K, V >> in Map <K, List <V >> in Java

Aashish Pawar

Betrachten Sie das folgende Problem. Ich möchte die Liste der Karten in die Karte konvertieren.

Eingang

[ 
  {a=1, b=2}, 
  {a=3, d=4, e=5},
  {a=5,b=6,e=7}
]

Ausgabe

{
  a=[1,3,5], 
  b=[2,6], 
  d=[4], 
  e=[5,7]
}
  

Ich habe den folgenden Code ausprobiert.

Code


static <K,V> Map<K,List<V>> getMapFromTheList(List<Map<K,V>> list)
    {
        return list.stream().flatMap(map -> map.entrySet().stream())
        .collect(Collectors.groupingBy(Map.Entry::getKey,Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
    }  

Gibt es einen besseren Weg, dies zu tun? Einfacher oder effizienter?

Eritreisch

Die Alternativen könnten folgendermaßen aussehen:

static <K,V> Map<K,List<V>> getMapFromTheListOld_1(List<Map<K,V>> list){
    Map<K,List<V>> map = new HashMap<>();
    for(Map<K,V> m : list){
        for(Map.Entry<K,V> e : m.entrySet()){
            if( !map.containsKey(e.getKey())){
                map.put(e.getKey(), new ArrayList<>());
            }
            map.get(e.getKey()).add(e.getValue());
        }
    }
    return map;
}

Sie können die innere Schleife vereinfachen, indem Sie Map#computeIfAbsent:

static <K,V> Map<K,List<V>> getMapFromTheListOld_2(List<Map<K,V>> list){
    Map<K,List<V>> map = new HashMap<>();
    for(Map<K,V> m : list){
        for(Map.Entry<K,V> e : m.entrySet()){
            map.computeIfAbsent(e.getKey(), k -> new ArrayList<>()).add(e.getValue());
        }
    }
    return map;
}

Aber IMO beide Ansätze sind nicht einfacher als Ihr Einzeiler mit Streams. Sie können jedoch einige neue Zeilen hinzufügen, um die Lesbarkeit zu verbessern:

static <K,V> Map<K,List<V>> getMapFromTheList(List<Map<K,V>> list){
    return list.stream()
            .flatMap(map -> map.entrySet().stream())
            .collect(Collectors.groupingBy(
                    Map.Entry::getKey, Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
}

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

So verwandeln Sie List <T> mit Lambda in JAVA8 in List <Map <K, V >>

Kann ich List <V> ohne foreach in Map <K, List <V>> konvertieren?

Java 8 convert Map <K, List <V >> zur Karte <V, List <K >>

Java 8-Streams: Lassen Sie Collectors.groupingBy Map <K, List <V >> anstelle von Map <K, List <List <V >> zurückgeben

Java: So konvertieren Sie List in Map

So konvertieren Sie Map in List in Java 8

Konvertieren Sie Set <Map.Entry <K, V >> in HashMap <K, V>

Java 8 Listen Sie <V> in Map <K, V> auf

So initialisieren Sie eine Map<K, Map<K,V>> auf einer einzelnen Zeile

jOOQ: In Map <K, List <Record2 <V, W >> holen

Wie könnte eine Liste in Map <K, V>, aber nicht in List <V> umgewandelt werden?

Listen Sie <Object []> auf Map <K, V> in Java 8 auf

Java 8 Listen Sie <T> in Map <K, V> auf

List <V> in Map <K, List <V >>, mit Java 8-Streams und benutzerdefinierte Liste und Karte Lieferanten Wie konvertiert?

將值從 Map<K, V<List>> 傳輸到 Map<otherKey, otherValue<List>> 的最佳方式

Karte <K, V> zurück zur Karte <V, Map <K, V >> nach groupingBy Wert, statt Map <Obj, List <Eintrag <K, V >>>

Liste der Elementliste in Map <K, Liste <V>> konvertieren

Java Map <K, V>: Warum get (Objekt) nicht get (K)?

Verarbeiten Sie std :: map <K, V> und std :: map <K, V *> auf ähnliche Weise

Scala - So konvertieren Sie Map [Int, List [List [IntVar]]] in

So konvertieren Sie List <Person> in Map <String, List <Employee>>

So konvertieren Sie List<Map<String,T>> in List<T>

So konvertieren Sie eine HashMap in einen K / V-String in Java 8 mit Streams

Java 8 Listen Sie <V> mit Funktion in Map <K, V> auf

Java-Fehler - Der Typ List <E> ist nicht sichtbar. - Der Typ Map <K, V> ist nicht sichtbar

Konvertieren Sie Map<UUID, List<T>> in List<T> in Java?

Warum erweitert Map <K, V> die Funktion <K, V> nicht?

So konvertieren Sie List <Object []> mit Streams & Lambda Java8 in Map <String, BigInteger>

So konvertieren Sie List <List <Map <String, String >>> in List <List <CustomObject >> in Dart

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  3. 3

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  4. 4

    Eclipse Oxygen - Projekte verschwinden

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Wie kann ich den Kaskadenmodus global einstellen?

  7. 7

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  8. 8

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  9. 9

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  10. 10

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  11. 11

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  12. 12

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  13. 13

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  14. 14

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  15. 15

    Wie wählt man Unterschiede mit drei Tabellen aus?

  16. 16

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

  17. 17

    Wie kann ich meine Tabelle abfragen, um sie in mySQL nach 2 Feldern zu gruppieren?

  18. 18

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  19. 19

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  20. 20

    Modbus Python Schneider PM5300

  21. 21

    Wie kann eine gleichmäßige Lastverteilung in ElasticSearch mit Indizes mit unterschiedlicher Anzahl von Shards erreicht werden?

heißlabel

Archiv