Java Map nach Werten sortieren

JavaBeginner
Jetzt üben

Einführung

In Java sind Maps standardmäßig unsortiert und speichern Daten im Schlüssel-Wert-Format. Es ist oft erforderlich, sie nach den Werten zu sortieren, um Entscheidungen auf der Grundlage der Werte zu treffen. In diesem schrittweisen Lab werden wir lernen, wie man eine Java Map nach den Werten sortiert.

Erstellen einer Map in Java

Zunächst werden wir eine Map von Schülern mit ihren Namen und Höhen in Zentimetern erstellen, um zu verstehen, wie man Maps in Java sortiert.

import java.util.*;

public class MapSortingDemo {
    public static void main(String args[]) {
        Map<String, Integer> students = new HashMap<>();
        students.put("Student 1", 159);
        students.put("Student 2", 147);
        students.put("Student 3", 183);
        students.put("Student 4", 167);
        students.put("Student 5", 173);
    }
}

Sortieren einer Map basierend auf Werten

Um die Map basierend auf den Werten zu sortieren, müssen wir eine Liste aus Map.entrySet() erstellen. Diese Methode gibt alle Schlüssel-Wert-Paare aus der Map zurück. Die Comparator-Funktion kommt ins Spiel, wenn das Sortieren einer bestimmten Menge von mehreren Parametern abhängt. In der Comparator-Funktion return student1.getValue().compareTo(student2.getValue()); bestimmt die Art des Sortierens, nämlich nach Wert, und dies wird die Map basierend auf den Werten sortieren.

List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());

Collections.sort(studentList, new Comparator<Map.Entry<String, Integer>>() {
    @Override
    public int compare(Map.Entry<String, Integer> student1, Map.Entry<String, Integer> student2) {
        return student1.getValue().compareTo(student2.getValue());
    }
});

Sortierte Map basierend auf Werten anzeigen

Zeige die sortierte Map in der Konsole an.

for (Map.Entry<String, Integer> student : studentList) {
    System.out.println(student.getKey() + " " + student.getValue());
}

Sortieren von Maps mit Lambda-Ausdruck

Wir können auch eine Map basierend auf Werten mit Lambda-Ausdrücken sortieren, was eine kürzere und effizientere Methode ist.

List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());

studentList.sort((student1, student2) -> student1.getValue().compareTo(student2.getValue()));

Sortierte Map basierend auf Werten mit Lambda-Ausdruck anzeigen

Zeige die sortierte Map in der Konsole an.

studentList.forEach(student -> System.out.println(student.getKey() + " " + student.getValue()));

Sortieren einer Map basierend auf Schlüsseln

Ähnlich können wir die Map basierend auf Schlüsseln sortieren. In der Comparator-Funktion return student1.getKey().compareTo(student2.getKey()); bestimmt die Art des Sortierens, nämlich nach Schlüssel.

List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());

Collections.sort(studentList, new Comparator<Map.Entry<String, Integer>>() {
    @Override
    public int compare(Map.Entry<String, Integer> student1, Map.Entry<String, Integer> student2) {
        return student1.getKey().compareTo(student2.getKey());
    }
});

Sortierte Map basierend auf Schlüsseln anzeigen

Zeige die sortierte Map in der Konsole an.

for (Map.Entry<String, Integer> student : studentList) {
    System.out.println(student.getKey() + " " + student.getValue());
}

Sortieren einer Map basierend auf Schlüsseln mit Lambda-Ausdruck

Wir können auch eine Map basierend auf Schlüsseln mit Lambda-Ausdrücken sortieren, was eine kürzere und effizientere Methode ist.

List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());

studentList.sort((student1, student2) -> student1.getKey().compareTo(student2.getKey()));

Sortierte Map basierend auf Schlüsseln mit Lambda-Ausdruck anzeigen

Zeige die sortierte Map in der Konsole an.

studentList.forEach(student -> System.out.println(student.getKey() + " " + student.getValue()));

Zusammenfassung

In diesem Lab haben wir gelernt, wie man eine Java-Map basierend auf Werten mit der Collections.sort()-Methode und Comparator-Funktionen sowie mit Lambda-Ausdrücken sortiert. Wir haben auch gelernt, wie man eine Map basierend auf Schlüsseln sortiert. Das Sortieren einer Map basierend auf Werten kann in vielen Situationen nützlich sein, wie beispielsweise bei Ranglisten oder prioritätsbasierten Operationen.