Лямбда как аргумент метода в Java — пример с функциональным интерфейсом
В Java начиная с версии 8 появились лямбда-выражения — короткие анонимные функции вида a -> a + 1. Их можно передавать в другие методы как обычные параметры. Это очень удобно для операций над коллекциями.
Пример 1: лямбда-выражение как параметр метода
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
// create an ArrayList
ArrayList<String> languages = new ArrayList<>();
// add elements to the ArrayList
languages.add("java");
languages.add("swift");
languages.add("python");
System.out.println("ArrayList: " + languages);
// pass lambda expression as parameter to replaceAll() method
languages.replaceAll(e -> e.toUpperCase());
System.out.println("Updated ArrayList: " + languages);
}
}
Вывод:
ArrayList: [java, swift, python]
Updated ArrayList: [JAVA, SWIFT, PYTHON]
В примере выше мы создали ArrayList с именем languages. Обратите внимание на строку:
languages.replaceAll(e -> e.toUpperCase());
Здесь e -> e.toUpperCase() — это лямбда-выражение. Оно берёт каждый элемент списка и переводит его в верхний регистр.
Пример 2: передача многострочного тела лямбды как аргумент функции
import java.util.ArrayList;
import java.util.Arrays;
class Main {
public static void main(String[] args) {
// create an ArrayList
ArrayList<String> languages = new ArrayList<>(Arrays.asList("java", "python"));
System.out.println("ArrayList: " + languages);
// call the foEach() method
// pass lambda as argument fo forEach()
// reverse each element of ArrayList
System.out.print("Reversed ArrayList: ");
languages.forEach((e) -> {
// body of lambda expression
String result = "";
for (int i = e.length()-1; i >= 0 ; i--)
result += e.charAt(i);
System.out.print(result + ", ");
});
}
}
Вывод:
ArrayList: [java, python]
Reversed ArrayList: avaj, nohtyp,
В примере выше мы создали ArrayList с именем languages. Обратите внимание на блок:
languages.forEach((e) -> {
// body of lambda expression
String result = "";
for (int i = e.length()-1; i >= 0 ; i--)
result += e.charAt(i);
System.out.print(result + ", ");
});
Здесь мы передаём лямбда-выражение как аргумент метода ArrayList.forEach(). Эта лямбда переворачивает каждый элемент списка задом наперёд.
Совет
Лямбды отлично сочетаются с методами коллекций: forEach, replaceAll, removeIf, sort. Они позволяют описывать поведение прямо там, где оно используется, без создания отдельного класса.