Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Consumer: Обробка Даних | Основи Та Функціональні Можливості Stream API
Stream API

bookConsumer: Обробка Даних

Ви вже ознайомилися з багатьма функціональними інтерфейсами у Java, але що робити, якщо потрібно виконати операцію, яка приймає аргумент, застосовує певні зміни або викликає побічний ефект — без повернення результату? У такому випадку використовується функціональний інтерфейс Consumer.

Інтерфейс Consumer

Зазвичай використовується для виконання дій, які змінюють стан або викликають побічні ефекти без повернення значення.

Інтерфейс Consumer входить до пакету java.util.function package і визначений наступним чином:

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

Метод accept(T t) приймає об'єкт типу T як вхідний параметр і виконує над ним операцію без повернення результату.

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

Припустимо, у вас є список рядків, і для кожного рядка потрібно вивести його разом з унікальним id, розділеними пробілом. Це можна реалізувати за допомогою інтерфейсу Consumer, передаючи кожен рядок разом з його індексом (id).

Main.java

Main.java

copy
12345678910111213141516171819
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Creating a `Consumer` that prints each string with its id Consumer<String> printNameWithId = (name) -> { int id = names.indexOf(name) + 1; // id = index + 1 System.out.println(id + " " + name); }; // Using `Consumer` to print each string with its id names.forEach(printNameWithId); } }

У цьому прикладі використовується Consumer для виведення кожного рядка зі списку з унікальним ідентифікатором. id для кожного елемента обчислюється за його індексом у списку, а результат виводиться у форматі "id string". Це дозволяє обробляти елементи списку без явного використання циклу.

Також можна спростити код, записавши лямбда-вираз безпосередньо у циклі forEach:

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.List; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Using `forEach` with a lambda expression to print the ID and name names.forEach(name -> System.out.println((names.indexOf(name) + 1) + " " + name)); } }

Як бачите, результат залишається незмінним, а код стає більш лаконічним та зручним для читання.

Використання стандартного методу

Інтерфейс Consumer також містить стандартний метод, який дозволяє поєднувати декілька операцій.

Метод andThen() дає змогу об'єднувати дві операції Consumer. Спочатку виконується перший Consumer, потім другий.

Наприклад, уявіть, що у вас є список імен, і потрібно виконати дві задачі: вивести кожне ім'я у верхньому регістрі, а потім вивести довжину цього імені. Використовуючи andThen(), можна об'єднати обидві операції в один Consumer, який застосує їх послідовно.

Main.java

Main.java

copy
12345678910111213141516171819202122
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // First `Consumer` — prints the name in uppercase Consumer<String> printUpperCase = name -> System.out.print(name.toUpperCase() + " - "); // Second `Consumer` — prints the length of the name Consumer<String> printLength = name -> System.out.println(name.length()); // Combine both `Consumers` using `andThen()` Consumer<String> combinedConsumer = printUpperCase.andThen(printLength); // Apply the combined `Consumer` to each name names.forEach(combinedConsumer); } }

У цьому прикладі спочатку виводиться ім'я у верхньому регістрі, після чого слідує дефіс і довжина імені. Використовується метод andThen() для об'єднання двох операцій Consumer: перша виводить ім'я, а друга — його довжину.

1. Що робить метод andThen() в інтерфейсі Consumer?

2. Який тип даних приймає метод accept в інтерфейсі Consumer?

question mark

Що робить метод andThen() в інтерфейсі Consumer?

Select the correct answer

question mark

Який тип даних приймає метод accept в інтерфейсі Consumer?

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Suggested prompts:

Can you show an example of using the Consumer interface with a list?

How does the andThen() method work in practice?

What are some common use cases for the Consumer interface?

Awesome!

Completion rate improved to 2.33

bookConsumer: Обробка Даних

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

Ви вже ознайомилися з багатьма функціональними інтерфейсами у Java, але що робити, якщо потрібно виконати операцію, яка приймає аргумент, застосовує певні зміни або викликає побічний ефект — без повернення результату? У такому випадку використовується функціональний інтерфейс Consumer.

Інтерфейс Consumer

Зазвичай використовується для виконання дій, які змінюють стан або викликають побічні ефекти без повернення значення.

Інтерфейс Consumer входить до пакету java.util.function package і визначений наступним чином:

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

Метод accept(T t) приймає об'єкт типу T як вхідний параметр і виконує над ним операцію без повернення результату.

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

Припустимо, у вас є список рядків, і для кожного рядка потрібно вивести його разом з унікальним id, розділеними пробілом. Це можна реалізувати за допомогою інтерфейсу Consumer, передаючи кожен рядок разом з його індексом (id).

Main.java

Main.java

copy
12345678910111213141516171819
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Creating a `Consumer` that prints each string with its id Consumer<String> printNameWithId = (name) -> { int id = names.indexOf(name) + 1; // id = index + 1 System.out.println(id + " " + name); }; // Using `Consumer` to print each string with its id names.forEach(printNameWithId); } }

У цьому прикладі використовується Consumer для виведення кожного рядка зі списку з унікальним ідентифікатором. id для кожного елемента обчислюється за його індексом у списку, а результат виводиться у форматі "id string". Це дозволяє обробляти елементи списку без явного використання циклу.

Також можна спростити код, записавши лямбда-вираз безпосередньо у циклі forEach:

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.List; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Using `forEach` with a lambda expression to print the ID and name names.forEach(name -> System.out.println((names.indexOf(name) + 1) + " " + name)); } }

Як бачите, результат залишається незмінним, а код стає більш лаконічним та зручним для читання.

Використання стандартного методу

Інтерфейс Consumer також містить стандартний метод, який дозволяє поєднувати декілька операцій.

Метод andThen() дає змогу об'єднувати дві операції Consumer. Спочатку виконується перший Consumer, потім другий.

Наприклад, уявіть, що у вас є список імен, і потрібно виконати дві задачі: вивести кожне ім'я у верхньому регістрі, а потім вивести довжину цього імені. Використовуючи andThen(), можна об'єднати обидві операції в один Consumer, який застосує їх послідовно.

Main.java

Main.java

copy
12345678910111213141516171819202122
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // First `Consumer` — prints the name in uppercase Consumer<String> printUpperCase = name -> System.out.print(name.toUpperCase() + " - "); // Second `Consumer` — prints the length of the name Consumer<String> printLength = name -> System.out.println(name.length()); // Combine both `Consumers` using `andThen()` Consumer<String> combinedConsumer = printUpperCase.andThen(printLength); // Apply the combined `Consumer` to each name names.forEach(combinedConsumer); } }

У цьому прикладі спочатку виводиться ім'я у верхньому регістрі, після чого слідує дефіс і довжина імені. Використовується метод andThen() для об'єднання двох операцій Consumer: перша виводить ім'я, а друга — його довжину.

1. Що робить метод andThen() в інтерфейсі Consumer?

2. Який тип даних приймає метод accept в інтерфейсі Consumer?

question mark

Що робить метод andThen() в інтерфейсі Consumer?

Select the correct answer

question mark

Який тип даних приймає метод accept в інтерфейсі Consumer?

Select the correct answer

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

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

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

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