Введение
В Java карты по умолчанию не сортируются и хранят данные в формате ключ-значение. Часто требуется их отсортировать по значениям, чтобы принимать решения на основе значений. В этом пошаговом практическом занятии мы узнаем, как сортировать карту Java по значениям.
Создание карты в Java
Во - первых, мы создадим карту студентов с их именами и ростами в сантиметрах, чтобы понять, как сортировать карты в Java.
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.entrySet(). Этот метод возвращает все пары ключ-значение из карты. Функция компаратора играет важную роль при сортировке определенного набора, когда это зависит от нескольких параметров. В функции компаратора return student1.getValue().compareTo(student2.getValue()); определяется способ сортировки, то есть по значению, и это позволит отсортировать карту по значениям.
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());
}
});
Отображение отсортированной карты по значениям
Отобразите отсортированную карту в консоли.
for (Map.Entry<String, Integer> student : studentList) {
System.out.println(student.getKey() + " " + student.getValue());
}
Сортировка карты с использованием лямбда - выражения
Мы также можем отсортировать карту по значениям с использованием лямбда - выражений, что является более коротким и эффективным способом.
List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());
studentList.sort((student1, student2) -> student1.getValue().compareTo(student2.getValue()));
Отображение отсортированной карты по значениям с использованием лямбда - выражения
Отобразите отсортированную карту в консоли.
studentList.forEach(student -> System.out.println(student.getKey() + " " + student.getValue()));
Сортировка карты по ключам
Аналогично, мы можем отсортировать карту по ключам. В функции компаратора 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());
}
});
Отображение отсортированной карты по ключам
Отобразите отсортированную карту в консоли.
for (Map.Entry<String, Integer> student : studentList) {
System.out.println(student.getKey() + " " + student.getValue());
}
Сортировка карты по ключам с использованием лямбда - выражения
Мы также можем отсортировать карту по ключам с использованием лямбда - выражений, что является более коротким и эффективным способом.
List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());
studentList.sort((student1, student2) -> student1.getKey().compareTo(student2.getKey()));
Отображение отсортированной карты по ключам с использованием лямбда - выражения
Отобразите отсортированную карту в консоли.
studentList.forEach(student -> System.out.println(student.getKey() + " " + student.getValue()));
Резюме
В этом практическом занятии мы узнали, как сортировать Java - карту по значениям с использованием метода Collections.sort() и функций Comparator, а также с использованием лямбда - выражений. Мы также узнали, как сортировать карту по ключам. Сортировка карты по значениям может быть полезной в многих ситуациях, таких как ранжирование или операции, основанные на приоритете.



