Java Лямбда-вирази
Java Лямбда-вирази
Лямбда-вирази додано в Java 8.
Лямбда-вираз — це короткий блок коду, який приймає параметри та повертає значення. Лямбда-вирази подібні до методів, але їм не потрібні назви, і їх можна реалізувати прямо в тілі методу.
Синтаксис
Найпростіший лямбда-вираз містить один параметр і вираз:
параметр -> вираз
Щоб використовувати більше одного параметра, візьміть їх у дужки:
(параметр1, параметр2) -> вираз
Вирази обмежені. Вони мають негайно повертати значення та не можуть містити змінні, призначення чи інструкції, такі як if
або for
. Щоб виконувати більш складні операції, блок коду можна використовувати з фігурними дужками. Якщо лямбда-вираз повинен повернути значення, тоді блок коду повинен мати інструкцію return
.
(параметр1, парметр2) -> { блок коду }
Використання лямбда-виразів
Лямбда-вирази зазвичай передаються як параметри функції:
Приклад
Використовуйте лямбда-вираз у методі forEach()
ArrayList
, щоб надрукувати кожен елемент у списку:
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
package), що використовується списками.
Приклад
Використовуйте інтерфейс 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);
}}
УВАГА! Статті нижче ↓ створені за допомогою штучного інтелекту!
Урок від Monika (ChatGPT)
Лямбда-вирази є потужною функцією мови програмування Java, яка дозволяє функціональне програмування. У цій статті ми розглянемо, що таке лямбда-вирази, як вони використовуються та які їхні переваги.
Що таке лямбда-вирази?
Лямбда-вирази — це спосіб визначення невеликих анонімних функцій у Java. Вони подібні до методів, але не вимагають імені, типу повернення чи модифікаторів. Натомість вони визначені за допомогою синтаксису, який є більш лаконічним і легшим для читання.
Ось приклад лямбда-виразу, який приймає два цілі числа та повертає їх суму:
(int a, int b) -> a + b
Цей лямбда-вираз визначає функцію, яка приймає два цілі числа (a та b) і повертає їх суму. Стрілка (->) відокремлює параметри функції від її тіла.
Як використовуються лямбда-вирази?
Лямбда-вирази часто використовуються у функціональних інтерфейсах, які мають лише один абстрактний метод. Ці інтерфейси можна реалізувати за допомогою лямбда-виразів, що робить код чистішим і лаконічнішим.
Ось приклад функціонального інтерфейсу під назвою Калькулятор:
@FunctionalInterface
interface Calculator {
int calculate(int a, int b);
}
Цей інтерфейс має лише один абстрактний метод під назвою calculate, який приймає два цілих числа та повертає ціле число. Анотація @FunctionalInterface необов’язкова, але доцільно включити її, щоб вказати, що інтерфейс призначений для використання з лямбда-виразами.
Тепер ми можемо створити екземпляр цього інтерфейсу за допомогою лямбда-виразу:
Calculator add = (a, b) -> a + b;
Це створює екземпляр калькулятора під назвою add, який додає два цілі числа. Потім ми можемо використовувати цей екземпляр для виконання обчислень:
int result = add.calculate(2, 3); // результат = 5
Лямбда-вирази також можна використовувати з вбудованими функціональними інтерфейсами в Java, такими як Predicate, Consumer і Supplier. Ці інтерфейси забезпечують стандартний спосіб виконання типових операцій над колекціями та потоками даних.
Переваги лямбда-виразів
Лямбда-вирази надають кілька переваг порівняно з традиційними методами Java:
- Стислість: Лямбда-вирази більш стислі, ніж традиційні методи, що полегшує читання та написання коду.
- Читабельність: Лямбда-вирази можуть зробити код більш читабельним, зменшивши кількість шаблонного коду, необхідного для простих операцій.
- Функціональне програмування: Лямбда-вирази дозволяють функціональне програмування на Java, що дозволяє створювати більш виразний і потужний код.
- Паралелізм: лямбда-вирази можна використовувати з паралельними потоками, щоб швидше й ефективніше виконувати операції з великими наборами даних.
Висновок
Лямбда-вирази — це потужна функція мови програмування Java, яка дозволяє функціональне програмування та робить код більш лаконічним і читабельним. Вони часто використовуються з функціональними інтерфейсами для виконання операцій над колекціями та потоками даних. Розуміючи лямбда-вирази, програмісти-початківці можуть писати більш виразний і потужний код на Java.
Урок від Bard (Google)
Лямбда-вирази в Java
Вступ
Лямбда-вирази, також відомі як анонімні функції, були представлені в Java 8. Вони є лаконічним і потужним способом написання коду, який можна використовувати в різних ситуаціях.
Що таке лямбда-вираз?
Лямбда-вираз — це функція, визначена без імені. Він складається зі списку параметрів, маркера зі стрілкою (->) і тіла. Тіло може бути одним виразом або блоком коду.
Як написати лямбда-вираз
Синтаксис лямбда-виразу такий:
(параметри) -> вираз
Наприклад, такий лямбда-вираз приймає один параметр типу int і повертає квадрат параметра:
(int x) -> x * x
Наступний лямбда-вираз приймає два параметри типу int і повертає суму параметрів:
(int x, int y) -> x + y
Як використовувати лямбда-вирази
Лямбда-вирази можна використовувати будь-де у вашому коді, де очікується функція. Наприклад, ви можете передати лямбда-вираз у параметр методу або використати його для ініціалізації змінної.
Ось приклад того, як передати лямбда-вираз у параметр методу:
public void printSquares(List<Integer> numbers) {
numbers.forEach(x -> System.out.println(x * x));
}
Цей код надрукує квадрат кожного числа в списку чисел.
Ось приклад використання лямбда-виразу для ініціалізації змінної:
Comparator<Integer> naturalOrderComparator = (x, y) -> x - y;
Цей код ініціалізує змінну під назвою naturalOrderComparator лямбда-виразом, який порівнює два цілі числа в порядку зростання.
Переваги використання лямбда-виразів
Лямбда-вирази пропонують низку переваг порівняно з традиційними методами, зокрема:
- Стислість: лямбда-вирази можуть бути набагато лаконічнішими, ніж традиційні методи. Це може зробити ваш код більш читабельним і легшим для обслуговування.
- Гнучкість: лямбда-вирази можна використовувати в різноманітних ситуаціях, де традиційні методи не підходять. Наприклад, лямбда-вирази можна використовувати для передачі функцій як параметрів іншим функціям або для створення анонімних внутрішніх класів.
- Продуктивність: у деяких випадках лямбда-вирази можуть бути ефективнішими, ніж традиційні методи. Це пояснюється тим, що компілятор часто може вбудовувати лямбда-вирази, що може зменшити накладні витрати на виклик методів.
Приклади використання лямбда-виразів
Ось кілька прикладів використання лямбда-виразів у Java:
Сортування списку чисел:
List<Integer> numbers = Arrays.asList(1, 3, 5, 2, 4);
numbers.sort((x, y) -> x - y);
Цей код відсортує список чисел у порядку зростання.
Фільтрація списку елементів:
List<String> names = Arrays.asList("Alice", "Bob", "Carol", "David");
List<String> shortNames = names.stream()
.filter(name -> name.length() < 5)
.collect(Collectors.toList());
Цей код створить новий список під назвою shortNames, який містить усі імена в списку імен, довжина яких не перевищує 5 символів.
Створення функції зворотного виклику (callback):
public interface Callback {
void callback();
}
public void doSomething(Callback callback) {
// Робити щось...
callback.callback();
}
Цей код визначає інтерфейс під назвою Callback, який має один метод під назвою callback(). Метод doSomething() приймає об’єкт Callback як параметр і викликає callback() для цього об’єкта, коли він щось виконує.
У наступному коді показано, як використовувати метод doSomething() із лямбда-виразом:
doSomething(() -> System.out.println("Hello, world!"));
Цей код надрукує повідомлення "Hello, world!" на консоль.
Висновок
Лямбда-вирази — це потужний і гнучкий інструмент, який можна використовувати для написання більш лаконічного, читабельного та ефективного коду. Якщо ви програмуєте на Java, рекомендується навчитися використовувати лямбда-вирази.