Java 8 Functional Interfaces: полное руководство (java.util.function)
Функциональные интерфейсы — интерфейсы с единственным абстрактным методом (SAM). Java 8 определила множество таких интерфейсов в пакете java.util.function для использования в лямбдах.
Таблица функциональных интерфейсов
| № | Интерфейс и описание |
|---|---|
| 1 | BiConsumer<T,U> — операция с двумя входами, без результата. |
| 2 | BiFunction<T,U,R> — функция двух аргументов с результатом. |
| 3 | BinaryOperator<T> — операция над двумя операндами типа T, результат T. |
| 4 | BiPredicate<T,U> — предикат двух аргументов. |
| 5 | BooleanSupplier — поставщик boolean. |
| 6 | Consumer<T> — операция с одним входом, без результата. |
| 7 | DoubleBinaryOperator — операция над двумя double, результат double. |
| 8 | DoubleConsumer — операция с одним double, без результата. |
| 9 | DoubleFunction<R> — функция double -> R. |
| 10 | DoublePredicate — предикат одного double. |
| 11 | DoubleSupplier — поставщик double. |
| 12 | DoubleToIntFunction — double -> int. |
| 13 | DoubleToLongFunction — double -> long. |
| 14 | DoubleUnaryOperator — унарный оператор double -> double. |
| 15 | Function<T,R> — функция T -> R. |
| 16 | IntBinaryOperator — (int, int) -> int. |
| 17 | IntConsumer — int -> void. |
| 18 | IntFunction<R> — int -> R. |
| 19 | IntPredicate — int -> boolean. |
| 20 | IntSupplier — поставщик int. |
| 21 | IntToDoubleFunction — int -> double. |
| 22 | IntToLongFunction — int -> long. |
| 23 | IntUnaryOperator — int -> int. |
| 24 | LongBinaryOperator — (long, long) -> long. |
| 25 | LongConsumer — long -> void. |
| 26 | LongFunction<R> — long -> R. |
| 27 | LongPredicate — long -> boolean. |
| 28 | LongSupplier — поставщик long. |
| 29 | LongToDoubleFunction — long -> double. |
| 30 | LongToIntFunction — long -> int. |
| 31 | LongUnaryOperator — long -> long. |
| 32 | ObjDoubleConsumer<T> — (T, double) -> void. |
| 33 | ObjIntConsumer<T> — (T, int) -> void. |
| 34 | ObjLongConsumer<T> — (T, long) -> void. |
| 35 | Predicate<T> — T -> boolean. |
| 36 | Supplier<T> — поставщик T. |
| 37 | ToDoubleBiFunction<T,U> — (T,U) -> double. |
| 38 | ToDoubleFunction<T> — T -> double. |
| 39 | ToIntBiFunction<T,U> — (T,U) -> int. |
| 40 | ToIntFunction<T> — T -> int. |
| 41 | ToLongBiFunction<T,U> — (T,U) -> long. |
| 42 | ToLongFunction<T> — T -> long. |
| 43 | UnaryOperator<T> — T -> T. |
Пример: Predicate<T>
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Java8Tester {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);
System.out.println("Print all numbers:");
eval(list, n -> true);
System.out.println("Print even numbers:");
eval(list, n -> n % 2 == 0);
System.out.println("Print numbers > 3:");
eval(list, n -> n > 3);
}
public static void eval(List<Integer> list, Predicate<Integer> predicate) {
for (Integer n : list) {
if (predicate.test(n)) System.out.println(n + " ");
}
}
}
Вывод
Print all numbers: 1 2 3 4 5 6 7 8 9
Print even numbers: 2 4 6 8
Print numbers greater than 3: 4 5 6 7 8 9
Predicate<T> — классический пример функционального интерфейса с методом test(T).
java
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Освоение строк в Java: создание, методы и лучшие практики
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
- Понимание Java Vector: использование, особенности и сравнение с ArrayList