はじめに
Java では、Map はデフォルトで並べ替えられず、キーと値の形式でデータを格納します。値に基づいて決定を行うために、値に基づいてソートする必要がよくあります。この手順に従った実験では、Java Map を値に基づいてソートする方法を学びます。
Java では、Map はデフォルトで並べ替えられず、キーと値の形式でデータを格納します。値に基づいて決定を行うために、値に基づいてソートする必要がよくあります。この手順に従った実験では、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.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 を表示します。
for (Map.Entry<String, Integer> student : studentList) {
System.out.println(student.getKey() + " " + student.getValue());
}
Lambda 式を使って、Map を値に基づいてソートすることもできます。これは、より短く効率的な方法です。
List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());
studentList.sort((student1, student2) -> student1.getValue().compareTo(student2.getValue()));
コンソールにソートされた Map を表示します。
studentList.forEach(student -> System.out.println(student.getKey() + " " + student.getValue()));
同様に、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 を表示します。
for (Map.Entry<String, Integer> student : studentList) {
System.out.println(student.getKey() + " " + student.getValue());
}
Lambda 式を使って、Map をキーに基づいてソートすることもできます。これは、より短く効率的な方法です。
List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());
studentList.sort((student1, student2) -> student1.getKey().compareTo(student2.getKey()));
コンソールにソートされた Map を表示します。
studentList.forEach(student -> System.out.println(student.getKey() + " " + student.getValue()));
この実験では、Collections.sort() メソッドと Comparator 関数、および Lambda 式を使って Java の Map を値に基づいてソートする方法を学びました。また、Map をキーに基づいてソートする方法も学びました。値に基づいて Map をソートすることは、ランキング付けや優先度に基づく操作など、多くのシチュエーションで役立ちます。