Класс BiConsumer
Класс BiConsumer - это функциональный интерфейс из пакета java.util.function, который представляет операцию, принимающую два входных аргумента и не возвращающую никакого результата. В первый параметр мы передаем первый аргумент типа T, во второй - второй аргумент типа U. Основное применение BiConsumer находит в stream-API, например, в методе forEach для коллекций типа Map, где нужно обработать пару ключ-значение.
Функциональный интерфейс BiConsumer содержит один абстрактный метод accept, который и выполняет основную логику, а также имеет стандартный метод andThen для объединения двух операций.
Синтаксис
@FunctionalInterface
public interface BiConsumer<T, U>
{
void accept(T t, U u);
default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after);
}
Пример
Давайте создадим BiConsumer, который складывает два числа и выводит результат на экран:
import java.util.function.BiConsumer;
public class Main
{
public static void main(String[] args)
{
BiConsumer<Integer, Integer> sum = (a, b) -> System.out.println(a + b);
sum.accept(2, 3);
}
}
Результат выполнения кода:
5
Пример
Давайте используем BiConsumer для перебора элементов Map с помощью метода forEach:
import java.util.Map;
import java.util.function.BiConsumer;
public class Main
{
public static void main(String[] args)
{
Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3);
BiConsumer<String, Integer> printer = (key, value) -> System.out.println(key + " = " + value);
map.forEach(printer);
}
}
Результат выполнения кода:
a = 1
b = 2
c = 3
Пример
Давайте объединим две операции с помощью метода andThen, чтобы сначала вывести сумму, а затем произведение двух чисел:
import java.util.function.BiConsumer;
public class Main
{
public static void main(String[] args)
{
BiConsumer<Integer, Integer> sum = (a, b) -> System.out.println("Sum: " + (a + b));
BiConsumer<Integer, Integer> product = (a, b) -> System.out.println("Product: " + (a * b));
BiConsumer<Integer, Integer> combined = sum.andThen(product);
combined.accept(2, 3);
}
}
Результат выполнения кода:
Sum: 5
Product: 6
Пример
Давайте применим BiConsumer совместно со stream-API для обработки пар элементов. Создадим поток из строк и для каждой строки применим операцию, принимающую два аргумента:
import java.util.List;
import java.util.function.BiConsumer;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
BiConsumer<String, Integer> printer = (str, index) -> System.out.println(index + ": " + str);
for (int i = 0; i < list.size(); i++)
{
printer.accept(list.get(i), i);
}
}
}
Результат выполнения кода:
0: a
1: b
2: c
3: d
4: e
Смотрите также
-
класс
BiConsumer,
который представляет операцию с двумя аргументами -
метод
accept,
который выполняет операцию над двумя аргументами -
класс
Consumer,
который принимает один аргумент -
класс
BiFunction,
который принимает два аргумента и возвращает результат