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

bookФільтрація Елементів за Допомогою Методу filter()

Під час роботи з колекціями даних у Java часто виникає потреба виділити певні елементи, які відповідають заданим умовам. Традиційно для цього використовують цикли та умовні оператори, що робить код більш громіздким. У таких випадках на допомогу приходить метод filter().

Ви вже використовували цей метод у наших прикладах, але ми ще не розглядали детально, який аргумент він приймає. Він приймає функціональний інтерфейс Predicate<T>, який визначає, чи повинен елемент бути включений до результуючого потоку.

Stream<T> filter(Predicate<? super T> predicate);

Тут T — це тип елементів у потоці, а Predicate<? super T> — це умова фільтрації, яка використовується для перевірки кожного елемента.

Практичне застосування

Припустимо, у вас є список співробітників, кожен з яких має name та yearsOfExperience у компанії. Потрібно вибрати лише тих, хто працює у компанії більше 5 років, щоб запропонувати їм бонус або додаткові пільги.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; class Employee { private final String name; private final int yearsOfExperience; public Employee(String name, int yearsOfExperience) { this.name = name; this.yearsOfExperience = yearsOfExperience; } public String getName() { return name; } public int getYearsOfExperience() { return yearsOfExperience; } @Override public String toString() { return name + " (" + yearsOfExperience + " years)"; } } public class Main { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("John", 6), new Employee("Sarah", 4), new Employee("Mike", 7), new Employee("Anna", 3), new Employee("Tom", 8) ); // Filtering employees with more than 5 years of experience List<Employee> experiencedEmployees = employees.stream() .filter(e -> e.getYearsOfExperience() > 5) .toList(); System.out.println("Experienced employees: " + experiencedEmployees); } }

У цьому прикладі створюється потік співробітників за допомогою stream(). Далі, використовуючи метод filter, відбираються співробітники, які мають більше ніж 5 років досвіду.

Результатом є новий список, що містить лише тих співробітників, які відповідають цій умові.

Коли використовувати filter

У більшості випадків доцільно використовувати filter() на початку, щоб зменшити обсяг даних для подальших операцій. Це підвищує продуктивність, оскільки наступні операції виконуватимуться над меншим набором даних.

Приклад

Якщо у вас є список співробітників і ви хочете спочатку відфільтрувати тих, хто має більше ніж 5 років досвіду, а потім перетворити решту співробітників у інший формат, доцільно почати саме з фільтрації.

List<Employee> result = employees.stream()
        .filter(e -> e.getYearsOfExperience() > 5)  // First, `filter`
        .map(e -> e.getName())  // Then apply other operations
        .toList();

Як видно з цього прикладу, спочатку розміщують метод filter(), а вже потім — map(), оскільки це дозволяє зменшити кількість елементів для подальшої обробки. Ви фільтруєте співробітників із понад 5 роками досвіду, а потім отримуєте їхні імена.

Такий порядок операцій є ефективним, оскільки запобігає непотрібній обробці даних під час трансформації.

1. Що виконує метод filter() у Stream API?

2. Який тип аргументу приймає метод filter()?

3. Що відбувається, якщо у методі filter() використати умову, яка завжди повертає false?

question mark

Що виконує метод filter() у Stream API?

Select the correct answer

question mark

Який тип аргументу приймає метод filter()?

Select the correct answer

question mark

Що відбувається, якщо у методі filter() використати умову, яка завжди повертає false?

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Suggested prompts:

Can you explain what a Predicate is in Java?

Can you show a full example with the Employee class?

Why is the order of filter and map important?

bookФільтрація Елементів за Допомогою Методу filter()

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

Під час роботи з колекціями даних у Java часто виникає потреба виділити певні елементи, які відповідають заданим умовам. Традиційно для цього використовують цикли та умовні оператори, що робить код більш громіздким. У таких випадках на допомогу приходить метод filter().

Ви вже використовували цей метод у наших прикладах, але ми ще не розглядали детально, який аргумент він приймає. Він приймає функціональний інтерфейс Predicate<T>, який визначає, чи повинен елемент бути включений до результуючого потоку.

Stream<T> filter(Predicate<? super T> predicate);

Тут T — це тип елементів у потоці, а Predicate<? super T> — це умова фільтрації, яка використовується для перевірки кожного елемента.

Практичне застосування

Припустимо, у вас є список співробітників, кожен з яких має name та yearsOfExperience у компанії. Потрібно вибрати лише тих, хто працює у компанії більше 5 років, щоб запропонувати їм бонус або додаткові пільги.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; class Employee { private final String name; private final int yearsOfExperience; public Employee(String name, int yearsOfExperience) { this.name = name; this.yearsOfExperience = yearsOfExperience; } public String getName() { return name; } public int getYearsOfExperience() { return yearsOfExperience; } @Override public String toString() { return name + " (" + yearsOfExperience + " years)"; } } public class Main { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("John", 6), new Employee("Sarah", 4), new Employee("Mike", 7), new Employee("Anna", 3), new Employee("Tom", 8) ); // Filtering employees with more than 5 years of experience List<Employee> experiencedEmployees = employees.stream() .filter(e -> e.getYearsOfExperience() > 5) .toList(); System.out.println("Experienced employees: " + experiencedEmployees); } }

У цьому прикладі створюється потік співробітників за допомогою stream(). Далі, використовуючи метод filter, відбираються співробітники, які мають більше ніж 5 років досвіду.

Результатом є новий список, що містить лише тих співробітників, які відповідають цій умові.

Коли використовувати filter

У більшості випадків доцільно використовувати filter() на початку, щоб зменшити обсяг даних для подальших операцій. Це підвищує продуктивність, оскільки наступні операції виконуватимуться над меншим набором даних.

Приклад

Якщо у вас є список співробітників і ви хочете спочатку відфільтрувати тих, хто має більше ніж 5 років досвіду, а потім перетворити решту співробітників у інший формат, доцільно почати саме з фільтрації.

List<Employee> result = employees.stream()
        .filter(e -> e.getYearsOfExperience() > 5)  // First, `filter`
        .map(e -> e.getName())  // Then apply other operations
        .toList();

Як видно з цього прикладу, спочатку розміщують метод filter(), а вже потім — map(), оскільки це дозволяє зменшити кількість елементів для подальшої обробки. Ви фільтруєте співробітників із понад 5 роками досвіду, а потім отримуєте їхні імена.

Такий порядок операцій є ефективним, оскільки запобігає непотрібній обробці даних під час трансформації.

1. Що виконує метод filter() у Stream API?

2. Який тип аргументу приймає метод filter()?

3. Що відбувається, якщо у методі filter() використати умову, яка завжди повертає false?

question mark

Що виконує метод filter() у Stream API?

Select the correct answer

question mark

Який тип аргументу приймає метод filter()?

Select the correct answer

question mark

Що відбувається, якщо у методі filter() використати умову, яка завжди повертає false?

Select the correct answer

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

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

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

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