Сортировка Java - карты по значениям

JavaBeginner
Практиковаться сейчас

Введение

В 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, а также с использованием лямбда - выражений. Мы также узнали, как сортировать карту по ключам. Сортировка карты по значениям может быть полезной в многих ситуациях, таких как ранжирование или операции, основанные на приоритете.