Класс BiFunction
Класс BiFunction представляет собой функциональный интерфейс,
который описывает функцию, принимающую два аргумента и возвращающую
результат. В первый параметр (первый обобщенный тип) мы передаем
тип первого входного аргумента, во второй параметр - тип второго
входного аргумента, а в третий - тип возвращаемого значения.
Основной метод этого интерфейса - apply, который применяет
функцию к переданным аргументам. Также у BiFunction есть
метод andThen, позволяющий объединить текущую функцию
с другой функцией, применяемой к результату.
Синтаксис
BiFunction<T, U, R>
Здесь T - тип первого аргумента, U - тип второго
аргумента, R - тип возвращаемого значения.
Пример
Давайте создадим функцию, которая складывает два числа:
import java.util.function.BiFunction;
public class Main
{
public static void main(String[] args)
{
BiFunction<Integer, Integer, Integer> sum = (a, b) -> a + b;
int res = sum.apply(2, 3);
System.out.println(res);
}
}
Результат выполнения кода:
5
Пример
Давайте создадим функцию, которая объединяет две строки:
import java.util.function.BiFunction;
public class Main
{
public static void main(String[] args)
{
BiFunction<String, String, String> concat = (a, b) -> a + b;
String res = concat.apply("abcde", "12345");
System.out.println(res);
}
}
Результат выполнения кода:
"abcde12345"
Пример
Давайте используем метод andThen, чтобы после сложения
умножить результат на 2:
import java.util.function.BiFunction;
import java.util.function.Function;
public class Main
{
public static void main(String[] args)
{
BiFunction<Integer, Integer, Integer> sum = (a, b) -> a + b;
Function<Integer, Integer> mult = x -> x * 2;
int res = sum.andThen(mult).apply(2, 3);
System.out.println(res);
}
}
Результат выполнения кода:
10
Пример
Давайте применим BiFunction для поэлементного сложения
двух списков через стримы:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main
{
public static void main(String[] args)
{
List<Integer> list1 = List.of(1, 2, 3, 4, 5);
List<Integer> list2 = List.of(10, 20, 30, 40, 50);
List<Integer> res = IntStream.range(0, list1.size())
.mapToObj(i -> list1.get(i) + list2.get(i))
.collect(Collectors.toList());
System.out.println(res);
}
}
Результат выполнения кода:
[11, 22, 33, 44, 55]
Смотрите также
-
класс
BiFunction,
который описывает функцию от двух аргументов -
метод
apply,
который применяет функцию к аргументам -
класс
Function,
который описывает функцию от одного аргумента -
класс
BiConsumer,
который описывает потребителя двух аргументов