Java の Map を値でソートする

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Java では、Map はデフォルトで並べ替えられず、キーと値の形式でデータを格納します。値に基づいて決定を行うために、値に基づいてソートする必要がよくあります。この手順に従った実験では、Java Map を値に基づいてソートする方法を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) 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 を値でソートする"}} java/sorting -.-> lab-117453{{"Java の Map を値でソートする"}} java/collections_methods -.-> lab-117453{{"Java の Map を値でソートする"}} java/lambda -.-> lab-117453{{"Java の Map を値でソートする"}} java/classes_objects -.-> lab-117453{{"Java の Map を値でソートする"}} java/arraylist -.-> lab-117453{{"Java の Map を値でソートする"}} java/hashmap -.-> lab-117453{{"Java の Map を値でソートする"}} java/iterator -.-> lab-117453{{"Java の Map を値でソートする"}} java/stream -.-> lab-117453{{"Java の Map を値でソートする"}} end

Java で Map を作成する

まず、Java で Map をソートする方法を理解するために、生徒の名前とセンチメートル単位の身長を持つ Map を作成します。

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

値に基づいて Map をソートする

Map を値に基づいてソートするには、Map.entrySet() から List を作成する必要があります。このメソッドは、Map からすべてのキーと値のペアを返します。特定のセットをソートする場合、複数のパラメータに依存するため、Comparator 関数が機能します。Comparator 関数では、return student1.getValue().compareTo(student2.getValue()); により、ソート方法が決定されます。つまり、値に基づいてソートされ、これにより Map が値に基づいてソートされます。

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

値に基づいてソートされた Map を表示する

コンソールにソートされた Map を表示します。

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

Lambda 式を使った Map のソート

Lambda 式を使って、Map を値に基づいてソートすることもできます。これは、より短く効率的な方法です。

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

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

Lambda 式を使った値に基づいてソートされた Map を表示する

コンソールにソートされた Map を表示します。

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

キーに基づいて Map をソートする

同様に、Map をキーに基づいてソートすることができます。Comparator 関数では、return student1.getKey().compareTo(student2.getKey()); により、ソート方法が決定されます。つまり、キーに基づいてソートされます。

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

キーに基づいてソートされた Map を表示する

コンソールにソートされた Map を表示します。

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

Lambda 式を使ったキーに基づく Map のソート

Lambda 式を使って、Map をキーに基づいてソートすることもできます。これは、より短く効率的な方法です。

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

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

Lambda 式を使ったキーに基づいてソートされた Map を表示する

コンソールにソートされた Map を表示します。

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

まとめ

この実験では、Collections.sort() メソッドと Comparator 関数、および Lambda 式を使って Java の Map を値に基づいてソートする方法を学びました。また、Map をキーに基づいてソートする方法も学びました。値に基づいて Map をソートすることは、ランキング付けや優先度に基づく操作など、多くのシチュエーションで役立ちます。