Java Map nach Werten sortieren

JavaJavaBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java/BasicSyntaxGroup -.-> java/output("Output") java/DataStructuresGroup -.-> java/sorting("Sorting") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ProgrammingTechniquesGroup -.-> java/lambda("Lambda") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/hashmap("HashMap") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/iterator("Iterator") java/FileandIOManagementGroup -.-> java/stream("Stream") subgraph Lab Skills java/output -.-> lab-117453{{"Java Map nach Werten sortieren"}} java/sorting -.-> lab-117453{{"Java Map nach Werten sortieren"}} java/collections_methods -.-> lab-117453{{"Java Map nach Werten sortieren"}} java/lambda -.-> lab-117453{{"Java Map nach Werten sortieren"}} java/classes_objects -.-> lab-117453{{"Java Map nach Werten sortieren"}} java/arraylist -.-> lab-117453{{"Java Map nach Werten sortieren"}} java/hashmap -.-> lab-117453{{"Java Map nach Werten sortieren"}} java/iterator -.-> lab-117453{{"Java Map nach Werten sortieren"}} java/stream -.-> lab-117453{{"Java Map nach Werten sortieren"}} end

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());
    }
});

Zeige die sortierte Map basierend auf Werten an

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 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()));

Zeige die sortierte Map basierend auf Werten mit Lambda-Ausdruck an

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());
    }
});

Zeige die sortierte Map basierend auf Schlüsseln an

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()));

Zeige die sortierte Map basierend auf Schlüsseln mit Lambda-Ausdruck an

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.