Erstellen einer geordneten Map in Java

  1. Sortieren der Map mithilfe der Klasse TreeMap in Java
  2. Erstellen einer Map-Ordnung mit Java8-Funktionen

Eine Map ist eine Datenstruktur in Java, die Schlüssel- und Wertepaare speichert. Die Karte ist eine Schnittstelle, die in der Hierarchie Sammlung vorhanden ist. Diese Schlüssel sind eindeutig, daher sind keine doppelten Schlüssel zulässig; die dem Schlüssel zugeordneten Variablen können jedoch doppelte Werte aufweisen. Klassen wie HashMap, LinkedHashMap und TreeMap implementieren die Schnittstelle Map.

Sortieren der Map mithilfe der Klasse TreeMap in Java

Das folgende Programm demonstriert die Sortierung der Map in einem Java-Programm.

import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> map = new TreeMap<String, Integer>();
        map.put("Third", 1);
        map.put("First", 2);
        map.put("Second", 3);

        for (String key: map.keySet()) {
            System.out.println(key + " ,ID = "+ map.get(key) );
        }
    }
}

Die Klasse TreeMap sortiert die Werte der Map in aufsteigender Reihenfolge. Es implementiert auch intern die Schnittstelle SortedMap, sodass eine Map-Instanz mit einem neuen Schlüsselwort erstellt wird.

Der Datentyp innerhalb der Treemap wird zum Zeitpunkt der Instanziierung angegeben. Der Schlüssel Map ist vom Typ String und sein Wert vom Typ Integer.

Die Funktion put fügt die Schlüssel-Wert-Paare in die Treemap ein. Nun wird eine for-each-Schleife definiert, um über die Karte zu iterieren. In Java ist eine direkte Iteration über die Karte nicht möglich. Die Schlüssel der Map werden also zunächst in eine Set-Instanz umgewandelt.

Die Funktion map.keySet gibt das Set der in der Map vorhandenen Schlüssel zurück. Diese Funktion gehört zur Klasse TreeMap und gibt die geordnete Ansicht der vorhandenen Schlüssel zurück. Die Funktion get holt sich den dem Schlüssel entsprechenden Wert.

Unten ist die Ausgabe in aufsteigender Reihenfolge.

First ,ID = 2
Second ,ID = 3
Third ,ID = 1

Erstellen einer Map-Ordnung mit Java8-Funktionen

Java8 bietet Unterstützung für funktionale Programmierung, die es Benutzern ermöglicht, über die Funktionskette hinweg zu arbeiten.

Streams ist eine Schnittstelle im java.util-Paket, die es erleichtert, die sequentiellen Operationen in einer einzigen Anweisung zu bearbeiten. Die Funktion Streams arbeitet in der Pipeline, in der ein Emitter Daten aussendet; es wird gefiltert, verarbeitet, transformiert und vieles mehr, je nach den Bedürfnissen der Benutzer.

package F09;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static java.util.AbstractMap.SimpleEntry;

public class MapOrdering {
    public static void main(String[] args) {
        Map<String, String> mapSortedByKey = Stream.of(
                new SimpleEntry<>("key3", "value1"),
                new SimpleEntry<>("key1", "value2"),
                new SimpleEntry<>("key2", "value3"))
                .sorted(Map.Entry.comparingByKey())
                .collect(Collectors.toMap(Map.Entry::getKey,
                        Map.Entry::getValue,
                        (oldVal, newValue) -> oldVal,
                        LinkedHashMap::new));

        System.out.println();
        System.out.print("Ordered List: ");
        for (String s1 : mapSortedByKey.keySet()) {
            System.out.print(" " + s1);
        }
    }
}

Die Schnittstelle Stream stellt verschiedene Funktionen bereit und bekommt ihre Implementierung in verschiedenen Klassen, um diese zu bearbeiten. Hier wird der Strom von Schlüssel-Wert-Paaren mit der neuen SimpleEntry-Klasse gebildet. Die Werte werden in die Funktion of eingefügt, um einen Stream zu bilden.

In der Kettenserie wird die Funktion sorted aufgerufen. Die Funktion benötigt eine Comparator-Instanz, um die Tasten je nach definierter Reihenfolge in eine Reihenfolge zu bringen. Die Funktion comparingByKey gibt den Komparator zurück, der den Schlüssel in natürlich aufsteigender Reihenfolge vergleicht.

Die Funktion sorted liefert schliesslich einen aufsteigenden Wertestrom zurück. Die Funktion collect der Klasse Stream sammelt die angegebenen Kartenwerte in einer neuen LinkedHashMap-Instanz. Die Klasse behält die Einfügereihenfolge der bereitgestellten Sequenz bei. Die Funktion verwendet die Instanz Collector als Parameter.

Der erste Parameter ist eine Lieferanten-toMap-Funktion, die einen neuen Container erstellt. Der zweite Parameter ist BiConsumer, der den Wert akkumuliert, und der letzte Parameter ist BiConsumer, der als Kombinator fungiert, der die Ergebnisse zusammenführt. Der Befehl LinkedHashMap::new kombiniert also das Ergebnis und gibt die gebildete Instanz zurück.

Die Instanz mapSortedByKey enthält nun die sequentiellen Kartenelemente, die mit der obigen for-each-Schleife iteriert werden. Die resultierenden Kartenschlüssel werden in der Standardausgabe unten gedruckt.

Ordered List:  key1 key2 key3

Verwandter Artikel - Java Map

  • Unterschied zwischen Hashmap und Map in Java
  • Wie man JSON in Map in Java konvertiert
  • Verwandter Artikel - Java Sort

  • Iteration über jedes Map-element in Java