Упорядкування Елементів за Допомогою Методу sorted()
Свайпніть щоб показати меню
У Stream API Java метод sorted() дозволяє ефективно впорядковувати елементи потоку. Сортування є важливою операцією, оскільки спрощує обробку даних і полегшує розміщення елементів у потрібному порядку.
Сортування у природному порядку
Метод sorted() є перевантаженим і має дві версії. Розглянемо першу з них:
Stream<T> sorted();
Ця версія сортує елементи на основі їхньої природної впорядкованості. Для використання цього методу елементи повинні реалізовувати інтерфейс Comparable, що дозволяє їм автоматично порівнюватися та впорядковуватися.
Практичний приклад
Уявіть собі фабрику з різними деталями, кожна з яких має унікальну вагу. Мета — відсортувати ці деталі у зростаючому порядку за їхньою вагою, використовуючи інтерфейс Comparable.
Main.java
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { // List of factory parts List<Part> parts = Arrays.asList( new Part("Wheel", 10), new Part("Engine", 250), new Part("Brake", 15), new Part("Chassis", 80) ); // Sorting parts by weight in ascending order parts.stream() .sorted() // Sorting by natural order .forEach(System.out::println); } } class Part implements Comparable<Part> { private String partName; private int weight; public Part(String partName, int weight) { this.partName = partName; this.weight = weight; } public String getPartName() { return partName; } public int getWeight() { return weight; } @Override public int compareTo(Part other) { return Integer.compare(this.weight, other.weight); // Sorting by weight } @Override public String toString() { return partName + ": " + weight + "kg"; } }
Тут клас Part реалізує інтерфейс Comparable<Part>. Метод compareTo() виконує сортування деталей за weight, використовуючи Integer.compare(this.weight, other.weight).
У головному класі метод sorted() сортує потік деталей у зростаючому порядку за їхньою weight.
Сортування з Comparator
Друга версія методу sorted() дозволяє сортувати з використанням власного Comparator. Цей метод приймає Comparator як параметр, визначаючи, як елементи мають бути порівняні та відсортовані.
Stream<T> sorted(Comparator<? super T> comparator);
За допомогою цього підходу можна вказати власний порядок сортування, що надає більше контролю над тим, як елементи будуть розташовані.
Практичний приклад
Припустимо, потрібно відсортувати список працівників заводу за зарплатою у спадному порядку. Для цього використовується метод sorted() разом із компаратором.
Main.java
123456789101112131415161718192021222324252627282930313233343536373839404142434445package com.example; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { // List of factory employees List<Employee> employees = Arrays.asList( new Employee("John", 50000), new Employee("Emily", 75000), new Employee("Michael", 45000), new Employee("Sophia", 60000) ); // Sorting employees by salary in descending order employees.stream() .sorted(Comparator.comparingInt(Employee::getSalary).reversed()) // Sorting in descending order .forEach(System.out::println); } } class Employee { private String name; private int salary; public Employee(String name, int salary) { this.name = name; this.salary = salary; } public String getName() { return name; } public int getSalary() { return salary; } @Override public String toString() { return name + ": " + salary; } }
Тут використовується компаратор Comparator.comparingInt(Employee::getSalary).reversed(), який спочатку сортує співробітників за зарплатою у зростаючому порядку, а потім застосовує reversed(), щоб змінити порядок на спадний.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат