Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java 8 Lambda Expressions: руководство по функциональному программированию

Лямбда-выражения — главная фича Java 8. Упрощают разработку, позволяя передавать поведение как данные.

Синтаксис

parameter -> expression body

Характеристики

Примеры лямбд

// с типами
MathOperation addition = (int a, int b) -> a + b;

// без типов
MathOperation subtraction = (a, b) -> a - b;

// с return и фигурными скобками
MathOperation multiplication = (int a, int b) -> { return a * b; };

// без return и скобок
MathOperation division = (int a, int b) -> a / b;

// без скобок у параметра
GreetingService greet1 = message -> System.out.println("Hello " + message);

// со скобками
GreetingService greet2 = (message) -> System.out.println("Hello " + message);

Полный пример

public class Java8Tester {
    public static void main(String[] args) {
        Java8Tester tester = new Java8Tester();

        MathOperation addition = (int a, int b) -> a + b;
        MathOperation subtraction = (a, b) -> a - b;
        MathOperation multiplication = (int a, int b) -> { return a * b; };
        MathOperation division = (int a, int b) -> a / b;

        System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
        System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
        System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
        System.out.println("10 / 5 = " + tester.operate(10, 5, division));

        GreetingService greet1 = message -> System.out.println("Hello " + message);
        GreetingService greet2 = (message) -> System.out.println("Hello " + message);
        greet1.sayMessage("Mahesh");
        greet2.sayMessage("Suresh");
    }

    interface MathOperation { int operation(int a, int b); }
    interface GreetingService { void sayMessage(String message); }

    private int operate(int a, int b, MathOperation op) {
        return op.operation(a, b);
    }
}

Вывод

10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello Mahesh
Hello Suresh

Область видимости (Scope)

Лямбда может захватывать final или effectively final переменные (присваиваются один раз). Повторное присваивание — ошибка компиляции.

Пример

public class Java8Tester {
    final static String salutation = "Hello! ";
    public static void main(String[] args) {
        GreetingService gs = message -> System.out.println(salutation + message);
        gs.sayMessage("Mahesh");
    }
    interface GreetingService { void sayMessage(String message); }
}

Вывод

Hello! Mahesh

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Понимание выражений, операторов и блоков в Java
  3. Комментарии в Java: типы, использование и лучшие практики
  4. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  5. Освоение строк в Java: создание, методы и лучшие практики
  6. Интерфейсы в Java: концепции, реализация и лучшие практики
  7. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  8. Try-with-resources в Java: автоматическое управление ресурсами
  9. Аннотации в Java: типы, размещение и практические примеры
  10. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода