Учебники по Java

Ява ГЛАВНАЯ Введение в Java Начало работы с Java Синтаксис Java Java-комментарии Java-переменные Типы данных Java Приведение типов Java Операторы Java Java-строки Java-математика Логические значения Java Java, если...иначе Java-переключатель Java-цикл во время выполнения Java для цикла Перерыв/продолжение Java Массивы Java

Java-методы

Java-методы Параметры метода Java Перегрузка метода Java Область применения Java Java-рекурсия

Java-классы

Java ООП Классы/объекты Java Атрибуты класса Java Методы класса Java Конструкторы Java Модификаторы Java Инкапсуляция Java Java-пакеты/API Наследование Java Java-полиморфизм Внутренние классы Java Java-абстракция Java-интерфейс Перечисления Java Пользовательский ввод Java Дата Java Список массивов Java Связанный список Java Java HashMap Набор хэшей для Java Java-итератор Классы-оболочки Java Исключения Java Java регулярное выражение Java-потоки Java-лямбда

Обработка файлов Java

Java-файлы Создание/запись файлов Java Файлы чтения Java Java Удалить файлы

Java Как

Добавить два числа

Справочник по Java

Ключевые слова Java Строковые методы Java Java математические методы

Примеры Java

Примеры Java Компилятор Java Java-упражнения Java-викторина Java-сертификат


Лямбда-выражения Java


Лямбда-выражения Java

Лямбда-выражения были добавлены в Java 8.

Лямбда-выражение — это короткий блок кода, который принимает параметры и возвращает значение. Лямбда-выражения похожи на методы, но им не нужно имя, и их можно реализовать прямо в теле метода.


Синтаксис

Самое простое лямбда-выражение содержит один параметр и выражение:

parameter -> expression

Чтобы использовать более одного параметра, заключите их в круглые скобки:

(parameter1, parameter2) -> expression

Выражения ограничены. Они должны немедленно возвращать значение и не могут содержать переменные, присваивания или операторы, такие как ifили for. Для выполнения более сложных операций можно использовать блок кода с фигурными скобками. Если лямбда-выражение должно возвращать значение, то в блоке кода должен быть returnоператор.

(parameter1, parameter2) -> { code block }

Использование лямбда-выражений

Лямбда-выражения обычно передаются функции в качестве параметров:

Пример

Используйте лямба-выражение в ArrayListметоде forEach()для печати каждого элемента в списке:

import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    numbers.forEach( (n) -> { System.out.println(n); } );
  }
}

Лямбда-выражения могут храниться в переменных, если тип переменной является интерфейсом, который имеет только один метод. Лямбда-выражение должно иметь то же количество параметров и тот же тип возвращаемого значения, что и этот метод. Java имеет множество встроенных интерфейсов такого типа, например, Consumerинтерфейс (находящийся в java.utilпакете), используемый списками.

Пример

Используйте интерфейс Java Consumerдля хранения лямбда-выражения в переменной:

import java.util.ArrayList;
import java.util.function.Consumer;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    Consumer<Integer> method = (n) -> { System.out.println(n); };
    numbers.forEach( method );
  }
}

Чтобы использовать лямбда-выражение в методе, метод должен иметь параметр с интерфейсом одного метода в качестве типа. Вызов метода интерфейса запустит лямбда-выражение:

Пример

Создайте метод, который принимает лямбда-выражение в качестве параметра:

interface StringFunction {
  String run(String str);
}

public class Main {
  public static void main(String[] args) {
    StringFunction exclaim = (s) -> s + "!";
    StringFunction ask = (s) -> s + "?";
    printFormatted("Hello", exclaim);
    printFormatted("Hello", ask);
  }
  public static void printFormatted(String str, StringFunction format) {
    String result = format.run(str);
    System.out.println(result);
  }
}