Java Lambda
Оновлено: 22.05.2023
Лямбда-вирази Java
У Java 8 додано лямбда-вирази.
Лямбда-вираз - це короткий блок коду, який отримує параметри і повертає значення. Лямбда-вирази схожі на методи, але їм не потрібне ім'я, і вони можуть бути реалізовані прямо в тілі методу.
Синтаксис
Найпростіший лямбда-вираз містить один параметр і вираз:
parameter -> expression
Щоб використовувати більше одного параметра, візьміть їх у круглі дужки:
(parameter1, parameter2) -> expression
Вирази обмежені. Вони повинні негайно повертати значення і не можуть містити змінні, присвоєння або оператори типу if або for. Для виконання більш складних операцій можна використовувати блок коду з фігурними дужками. Якщо лямбда-вираз повинен повертати значення, то блок коду повинен містити оператор повернення.
(parameter1, parameter2) -> { code block }
Використання лямбда-виразів
Лямбда-вирази зазвичай передаються як параметри функції:
Використовуйте лямбда-вираз у методі forEach() ArrayList, щоб вивести кожен елемент списку:
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);