Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpCoCm 214 of 322 menu
◀ ▶

Свой порядок сравнения в Java

Интерфейс Comparator<T> описывает функцию «какой из двух элементов меньше». Его передают в TreeSet, TreeMap, PriorityQueue и в List.sort, когда естественный порядок Comparable не подходит.

Метод compare(a, b) возвращает отрицательное число, если a идет раньше b, ноль при равенстве и положительное, если a больше. Лямбда часто короче отдельного класса.

Сортировка строк по длине, а при равной длине по алфавиту:

import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { Comparator<String> byLenThenText = Comparator .comparingInt(String::length) .thenComparing(Comparator.naturalOrder()); List<String> tags = List.of("log", "api", "io"); var sorted = tags.stream().sorted(byLenThenText).toList(); System.out.println(sorted); } }

Фабричные методы comparing, comparingInt и цепочка thenComparing собирают правило по частям. Для обратного порядка есть reversed и reverseOrder:

import java.util.Comparator; import java.util.TreeSet; public class Main { public static void main(String[] args) { TreeSet<Integer> desc = new TreeSet<>(Comparator.reverseOrder()); desc.add(4); desc.add(1); desc.add(7); System.out.println(desc); } }

Дан список строк:

var strings = List.of("bb", "a", "ccc");

Отсортируйте его по длине строки по возрастанию и выведите результат.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить