Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Упорядкування Елементів за Допомогою Методу sorted() | Проміжні Операції у Stream API
Quizzes & Challenges
Quizzes
Challenges
/
Stream API

bookУпорядкування Елементів за Допомогою Методу sorted()

У Stream API Java метод sorted() дозволяє ефективно впорядковувати елементи потоку. Сортування є важливою операцією, оскільки спрощує обробку даних і полегшує розміщення елементів у потрібному порядку.

Сортування у природному порядку

Метод sorted() є перевантаженим і має дві версії. Розглянемо першу з них:

Stream<T> sorted();  

Ця версія сортує елементи на основі їхньої природної впорядкованості. Для використання цього методу елементи повинні реалізовувати інтерфейс Comparable, що дозволяє їм автоматично порівнюватися та впорядковуватися.

Практичний приклад

Уявіть собі фабрику з різними деталями, кожна з яких має унікальну вагу. Мета — відсортувати ці деталі у зростаючому порядку за їхньою вагою, використовуючи інтерфейс Comparable.

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
package 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

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445
package 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(), щоб змінити порядок на спадний.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 5

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you show an example of sorting a custom class using the natural order?

How do I implement the Comparable interface in my own class?

Can you explain how to use a custom Comparator with the sorted() method?

Awesome!

Completion rate improved to 2.33

bookУпорядкування Елементів за Допомогою Методу sorted()

Свайпніть щоб показати меню

У Stream API Java метод sorted() дозволяє ефективно впорядковувати елементи потоку. Сортування є важливою операцією, оскільки спрощує обробку даних і полегшує розміщення елементів у потрібному порядку.

Сортування у природному порядку

Метод sorted() є перевантаженим і має дві версії. Розглянемо першу з них:

Stream<T> sorted();  

Ця версія сортує елементи на основі їхньої природної впорядкованості. Для використання цього методу елементи повинні реалізовувати інтерфейс Comparable, що дозволяє їм автоматично порівнюватися та впорядковуватися.

Практичний приклад

Уявіть собі фабрику з різними деталями, кожна з яких має унікальну вагу. Мета — відсортувати ці деталі у зростаючому порядку за їхньою вагою, використовуючи інтерфейс Comparable.

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
package 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

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445
package 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(), щоб змінити порядок на спадний.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 5
some-alt