Класс Function
Класс Function - это функциональный интерфейс из пакета
java.util.function, который представляет функцию,
принимающую один аргумент типа T и возвращающую
результат типа R. В первом параметре (при вызове метода
apply) мы передаем входное значение, а на выходе
получаем преобразованный результат. Интерфейс часто используется
в stream-операциях, например, в методе map.
Синтаксис
@FunctionalInterface
public interface Function<T, R>
{
R apply(T t);
}
Пример
Давайте создадим функцию, которая принимает строку и возвращает ее длину:
import java.util.function.Function;
public class Main
{
public static void main(String[] args)
{
Function<String, Integer> func = str -> str.length();
System.out.println(func.apply("abcde"));
}
}
Результат выполнения кода:
5
Пример
Давайте используем Function вместе с методом
map для преобразования элементов потока:
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
Function<String, String> func = str -> str.toUpperCase();
List<String> res = list.stream()
.map(func)
.collect(Collectors.toList());
System.out.println(res);
}
}
Результат выполнения кода:
[A, B, C, D, E]
Пример
Давайте скомбинируем две функции с помощью метода
andThen - сначала возведем число в квадрат,
а затем преобразуем результат в строку:
import java.util.function.Function;
public class Main
{
public static void main(String[] args)
{
Function<Integer, Integer> square = n -> n * n;
Function<Integer, String> toStr = n -> "Result: " + n;
Function<Integer, String> combined = square.andThen(toStr);
System.out.println(combined.apply(5));
}
}
Результат выполнения кода:
"Result: 25"