НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
Мова програмування Java. W3Schools українською. Уроки для початківців

En

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:

  1. Стислість: Лямбда-вирази більш стислі, ніж традиційні методи, що полегшує читання та написання коду.
  2. Читабельність: Лямбда-вирази можуть зробити код більш читабельним, зменшивши кількість шаблонного коду, необхідного для простих операцій.
  3. Функціональне програмування: Лямбда-вирази дозволяють функціональне програмування на Java, що дозволяє створювати більш виразний і потужний код.
  4. Паралелізм: лямбда-вирази можна використовувати з паралельними потоками, щоб швидше й ефективніше виконувати операції з великими наборами даних.

Висновок

Лямбда-вирази — це потужна функція мови програмування 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, рекомендується навчитися використовувати лямбда-вирази.