Класс UnaryOperator
Класс UnaryOperator - это функциональный интерфейс из пакета java.util.function,
который наследуется от Function и представляет собой операцию над одним операндом,
возвращающую результат того же типа, что и входной аргумент. В первый параметр метода
apply мы передаем значение, которое нужно преобразовать, а метод возвращает
преобразованное значение того же типа. Класс часто используется в Stream API для
замены элементов потока, например в методе Stream.replaceAll или при обработке
элементов списка через List.replaceAll.
Синтаксис
@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T>
{
T apply(T t);
}
Так как UnaryOperator является функциональным интерфейсом, его можно
реализовать с помощью лямбда-выражения или ссылки на метод.
Пример
Давайте создадим простой UnaryOperator, который удваивает число:
import java.util.function.UnaryOperator;
public class Main
{
public static void main(String[] args)
{
UnaryOperator<Integer> doubleValue = x -> x * 2;
int res = doubleValue.apply(5);
System.out.println(res);
}
}
Результат выполнения кода:
10
Пример
Давайте применим UnaryOperator к каждому элементу списка
с помощью метода replaceAll:
import java.util.List;
import java.util.ArrayList;
import java.util.function.UnaryOperator;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4, 5));
UnaryOperator<Integer> square = x -> x * x;
list.replaceAll(square);
System.out.println(list);
}
}
Результат выполнения кода:
[1, 4, 9, 16, 25]
Пример
Давайте используем UnaryOperator вместе со Stream API
для преобразования каждого элемента потока:
import java.util.List;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
UnaryOperator<String> toUpperCase = s -> s.toUpperCase();
List<String> res = List.of("abcde", "12345")
.stream()
.map(toUpperCase)
.collect(Collectors.toList());
System.out.println(res);
}
}
Результат выполнения кода:
[ABCDE, 12345]
Смотрите также
-
класс
Stream,
который представляет поток элементов -
класс
Function,
родительский интерфейс для UnaryOperator -
класс
BinaryOperator,
который принимает два аргумента одного типа -
метод
map,
который преобразует элементы потока