Stream.sorted()
Сортирует элементы потока.
Доступно с: Java 8
Синтаксис
Stream<T> sorted()
Stream<T> sorted(Comparator<? super T> comparator)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| comparator | Comparator<? super T> | Необязательное правило сравнения. |
Возвращаемое значение
Stream<T>Отсортированный поток.
Примеры
Отсортированная копия, исходный список не меняется:
void main() {
List<Integer> nums = List.of(3, 1, 2);
IO.println(nums.stream().sorted().toList());
IO.println(nums.stream().sorted(Comparator.reverseOrder()).toList());
IO.println(nums);
}Результат:
[1, 2, 3]
[3, 2, 1]
[3, 1, 2]Три самых дорогих товара:
record Product(String name, int price) {}
void main() {
var products = List.of(new Product("a", 50), new Product("b", 10),
new Product("c", 90), new Product("d", 70));
products.stream()
.sorted(Comparator.comparingInt(Product::price).reversed())
.limit(3)
.forEach(p -> IO.println(p.name() + " " + p.price()));
}Результат:
c 90
d 70
a 50Примечания
Без аргумента элементы должны быть Comparable, иначе при выполнении будет ClassCastException. Сортировка устойчивая для упорядоченных потоков. Это «тяжёлая» операция: ей нужно увидеть все элементы, поэтому на бесконечном потоке она не завершится.
См. также
- List.sort() — Сортирует список на месте по заданному правилу.
- Comparator.comparing() — Создаёт компаратор, который сравнивает объекты по одному полю.
- Stream.distinct() — Убирает повторяющиеся элементы потока.
В учебнике
- Операции над потоками — Основные операции Stream API — filter, map, sorted, distinct, limit, skip, count, reduce, anyMatch, findFirst и числовые потоки.