Lambda Function

Проработать

  1. Встроенные функциональные интерфейсы
  2. Введение в лямбда-выражения
  3. Урок 326: Java 8 p2: Лямбда
  4. #2 Функциональные интерфейсы / Java Lambdas / Source Code
  5. Functional Interfaces in Java 8
  6. Lambda-выражения на примерах
  7. Scala lambda функция с функцией карты
  8. Урок 1. Что такое лямбда-выражения в Java?
  9. Java 8 Tutorial
  10. Разбираем лямбда-выражения в Java
  11. Функциональные интерфейсы в Java 8 → Consumer, Supplier, Predicate и Function. Что к чему и зачем нужны
  12. Лямбда-выражения в Java: от простого к сложному + 4 Правила Использования! 📚
  13. Lambda Expressions in Java - Full Simple Tutorial

Что это

Лямбда выражения(анонимные методы) - пришли в JAVA из функционального программирования, с помощью которого можем быстро без помощи анонимных классов реализовать интерфейс с одним методом(также может содержать default и static методы). Есть преимущество перед анонимными классами, так как после компиляции лямбда становиться методом класса. Также есть преимущества у многоядерных процессоров путем параллельной обработки коллекций. Лямбда позволяет хранить и передавать код как переменную.

@FunctionalInterface

@FunctionalInterface - аннотация метка которая при компиляции следит, чтобы интерфейс соответствовал условиям функционального интерфейса - только 1 абстрактный метод и позволяет default и static методы.

Формат

parameter -> {expression}

или

(parameter1, parameter2) -> {expression}

Пример реализации Runnable

Runnable task = () -> {
    String threadName = Thread.currentThread().getName();
    System.out.println("Hello " + threadName);
};

Thread thread = new Thread(task);
thread.start();
        

Важные @FunctionalInterface в Java

  1. Predicate<T> - "boolean test(T t)" - фильтрация.
  2. Consumer<T> - "void accept(T t);" - выполняет некоторое действие над объектом типа T, при этом ничего не возвращая.
  3. Supplier<T> - "T get()" - не принимает никаких аргументов, но должен возвращать объект типа T.
  4. Function<T, R> - "R apply(T t);" - представляет функцию перехода от объекта типа T к объекту типа R.
  5. UnaryOperator<T> - "T apply(T t)" - принимает в качестве параметра объект типа T, выполняет над ними операции и возвращает результат операций в виде объекта типа T.
  6. BinaryOperator<T> - "T apply(T t1, T t2)" - принимает в качестве параметра два объекта типа T, выполняет над ними бинарную операцию и возвращает ее результат также в виде объекта типа T.