Sortieren einer HashMap nach dem Schlüssel in Java
-
Sortieren Sie das Keyset mit der Klasse
TreeMap
in Java - Sortieren des Keysets mit den Java 8-Funktionen
- Verstehen Sie die Stream-Funktion zur Karteninitialisierung in Java in
- Verstehen Sie die Map Transformation Stream-Funktion in Java
Der Begriff HashMap
in Java ist die Sammlung, die von der Map
-Schnittstelle abgeleitet ist. Diese Sammlung oder Klasse ist im Paket java.util
vorhanden und speichert die Daten in einem Schlüssel-Wert-Paar. Beachten Sie, dass es auf der Karte nicht zwei Schlüssel geben kann. Wenn der doppelte Schlüssel eingefügt wird, wird der Wert des jeweiligen Schlüssels durch den neueren Wert ersetzt.
Sortieren Sie das Keyset mit der Klasse TreeMap
in Java
Unten ist der Codeblock, um die Sortierung einer HashMap
nach ihrem Schlüssel zu demonstrieren.
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class HashMapSortByKey {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("2", "Value5");
map.put("3", "Value1");
map.put("1", "Value2");
map.put("4", "Value3");
map.put("9", "Value4");
map.put("hi11", "Value6");
map.put("hi0", "Value7");
System.out.print("Unordered List: ");
for (String s : map.keySet()) {
System.out.print(" " + s);
}
System.out.println();
System.out.print("Ordered List: ");
TreeMap<String, String> map1 = new TreeMap<>(map);
for (String s : map1.keySet()) {
System.out.print(" " + s);
}
}
}
Im obigen Codeblock wird das Objekt map
mit dem Standardkonstruktor HashMap
mit dem Schlüsselwort new
deklariert. Die Anweisung erzeugt eine Instanz der Klasse HashSet
und weist den Wert der Schnittstellenreferenz Map
zu. Die Typen sind kompatibel, da die Klasse HashMap
die Schnittstelle Map
intern implementiert.
Die Karte wird mit einigen Schlüsselwerten initialisiert. Das Einfügen erfolgt mit der Methode put
, die den Schlüssel an seinen angegebenen Wert bindet. Die Methode gibt den previous value
zurück, wenn der Schlüssel bereits in der Karte vorhanden war und überschreibt den vorherigen Wert mit einem angegebenen. Die Funktion gibt einen null
-Wert zurück, wenn der Schlüssel noch nicht in der Karte vorhanden ist. Es wirft IllegalArgumentException
, wenn die Eigenschaft des Schlüssels oder Werts das Einfügen des Werts verbietet.
Um nun über die Karte zu iterieren, wird die for-each
-Schleife verwendet. Die Funktion map.keySet
gibt das Set
-Format aller Schlüssel in der Karte zurück. Die keyset-Funktion ruft in der for-each
-Schleife eine Sammlung ab, über die die Variable iterieren kann; daher Drucken der Schlüssel. Die Werte werden in einem ungeordneten Format ausgegeben, und es gibt keine genau definierte Art und Weise, wie der Benutzer die Ausgabe erhält.
Um die Kartenschlüssel zu sortieren, wird die Klasse TreeSet
verwendet. Die Variable map
wird zum Zeitpunkt der Instanziierung als Konstruktorparameter im Konstruktor TreeSet
übergeben. Die Klasse implementiert das Interface Comparable
, um die Schlüssel zu sortieren. Wenn die resultierende Karte map1
gedruckt wird, gibt sie die sortierten Schlüssel in der Ausgabe aus.
Unten ist die Ausgabe des obigen Codeblocks.
Ausgabe:
Unordered List: 1 hi11 2 3 4 9 hi0
Ordered List: 1 2 3 4 9 hi0 hi11
Sortieren des Keysets mit den Java 8-Funktionen
Java 8 bietet das Privileg der funktionalen Programmierung, die beim Überarbeiten der Kettenfunktionen hilft. Im folgenden Programm sieht man, dass Instanziierung und Initialisierung in einer Anweisung erfolgen. Während es im ersten Beispielcode eine mühsame Aufgabe ist, die Karte zu füllen. Im Folgenden wird das Verständnis der Streams
und Funktionen zum Instanziieren der Karte in einer einzigen Anweisung gegeben.
Streams
ist eine Schnittstelle im java.util
-Paket, die Flexibilität bietet, um die Abfolge von Operationen in einem Durchgang zu bearbeiten. Der Streams
arbeitet in der Pipeline, wo ein Emitter die Daten ausgibt; es wird gefiltert, verarbeitet, transformiert und vieles mehr nach den Bedürfnissen der Benutzer.
import static java.util.AbstractMap.SimpleEntry;
import static java.util.stream.Collectors.toMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Stream;
public class HashMapSortByKey {
public static void main(String[] args) {
Map<String, String> map =
Stream
.of(new SimpleEntry<>("key6", "value1"), new SimpleEntry<>("key12", "value2"),
new SimpleEntry<>("key9", "value3"))
.collect(toMap(SimpleEntry::getKey, SimpleEntry::getValue));
System.out.print("Unordered List: ");
for (String s : map.keySet()) {
System.out.print(" " + s);
}
Map<String, String> mapSortedByKey =
map.entrySet()
.stream()
.sorted(Map.Entry.<String, String>comparingByKey().reversed())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldVal, newValue) -> oldValue, LinkedHashMap::new));
System.out.println();
System.out.print("Ordered List: ");
for (String s1 : mapSortedByKey.keySet()) {
System.out.print(" " + s1);
}
}
}
Verstehen Sie die Stream-Funktion zur Karteninitialisierung in Java in
Zunächst ruft der Stream
die Funktion of()
auf, die den angegebenen Stream in sequentieller Reihenfolge zurückgibt. Die Funktion erstellt Objekte der Klasse SimpleEntry
, um Mappings der Schlüssel-Wert-Form zu erstellen. Die Klasse implementiert das Interface Entry
und hat die Methode entrySet
, die die Sammlungsansicht der Karte zurückgibt.
Sobald die Key-Value-Einträge gebildet sind, werden die Werte mit der Funktion collect
auf einer Karte gesammelt. Es handelt sich um eine Terminalfunktion, was bedeutet, dass nach der Collect-Funktion keine Methoden mehr aufgerufen werden können. Die Funktion verpackt oder bindet die Streamwerte in die gewünschten Datenstrukturen.
Die als Parameter angegebene Eingabe ist immer eine Collector
-Referenz. Die toMap
ist eine statische Funktion in der Klasse Collectors
, die einen Collector
zurückliefert, der die Stream-Elemente in einer Map bindet. Die Funktion verwendet einen Key Mapper und den Key Value Function
als Parameter. Nun bedeutet die Methodenreferenz ::
den Aufruf der Funktionen der angegebenen Klasse.
Im Key Mapper extrahiert die Funktion getKey
den Schlüssel aus dem gefüllten EntrySet
-Stream. In ähnlicher Weise wird in der Key Value-Funktion die Funktion getValue
aufgerufen, um den Wert aus dem Stream EntrySet
zu erhalten.
Die Variablen Collector
Function
aus dem obigen Code sind die funktionalen Schnittstellen in Java, die eine einzige abstrakte Methode für die Funktionalität haben. Die Definitionen der abstrakten Methode werden in Klassen definiert, die sie implementieren.
Verstehen Sie die Map Transformation Stream-Funktion in Java
Über die soeben entstandene Instanz map
wird die Funktion entrySet
aufgerufen. Die Funktion gibt die eingestellte Ansicht der Karteneinträge zurück und ist in der Kartenoberfläche vorhanden. Über diesen Einträgen wird die Methode stream
aufgerufen, um die Einträge in den sequentiellen Stream zu konvertieren. Über den Strom der Einträge wird die Funktion sortiert
aufgerufen.
Es braucht einen Comparator
, um die Stream
-Elemente zu vergleichen. Die sortierte Funktion gibt schließlich den sortierten Strom der angegebenen Einträge zurück. Die Funktion comparingByKey
gibt den Komparator Map.Entry
mit der Standardreihenfolge auf dem Schlüssel zurück. Der Komparator gibt einen Schlüsselsatz zurück; wenn ein gefundener Schlüssel null ist, wirft er NullPointerException
von der Funktion.
Wenn der Eintragssatz abgerufen wird, wird die Funktion reversed
aufgerufen, um die Reihenfolge der Elemente in der Sammlung umzukehren. Schließlich wird die Funktion collect
über den Kartenstream aufgerufen. Die Funktion ist ein Terminaloperator, daher können nach der Funktion collect
keine Operationen aufgerufen werden. In der Funktion wird die Funktion toMap
aufgerufen, um den Stream in die Karte umzuwandeln.
Die Funktion benötigt vier Parameter: Der keyMapper
ist eine Funktion, die Schlüssel erzeugt, der valueMapper
ist eine Mapping-Funktion, die ihre Werte erzeugt, die mergeFunction
ist ein BinaryOperator
, der eine Funktion zusammenführt, und der mapSupplier
ist eine Lieferanten
-Funktion, die eine neue, leere Karte zurückgibt, in die die Ergebnisse eingefügt werden. Schließlich wird die resultierende Konsolenausgabe oben ausgegeben.
Ausgabe:
Unordered List: key12 key6 key9
Ordered List: key9 key6 key12
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn