Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 8. Коллекции в java.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
279.3 Кб
Скачать

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

Простейшее лямбда – выражение имеет вид:

people.forEach((Stud value) -> System.out.println(value.info()));

Здесь people – имя коллекции, Stud – имя класса, размещенного в коллекции,

info() – метод классов иерархии для получения всех полей объекта.

Еще более простой пример:

numbers.forEach((Integer value) -> System.out.println(value));

Лямбда – выражение состоит из двух частей: первая слева от стрелки (->) перечисляет параметры и вторая, справа от нее – это тело.

В лямбда – выражение передаются не только данные, но и поведение

Почему лямбда – выражения так полезны? Передача этого выражения другой функции позволяет передавать не только значения, но и поведение, и это повышает уровень абстракции.

Вновь рассмотрим простой пример:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

Пусть нужно написать метод суммирования всех значений в списке:

public int sumAll(List<Integer> numbers) {

int total = 0;

for (int number : numbers) {

total += number; }

return total;}

Назавтра потребовалось иметь функцию, которая суммирует только четные числа в списке. Каков наиболее быстрый способ сделать это? Скопируем прежний метод и добавим условие:

public int sumAllEven(List<Integer> numbers) {

int total = 0;

for (int number : numbers) { if (number % 2 == 0) {

total += number; } }

return total;}

Затем потребуется суммировать числа в списке, большие 3. Мы снова скопируем текст и снова изменим условие. Более мощным средством будет написание функции, принимающей кроме списка условия Predicate, которое определяет, как отфильтровывать числа в списке перед их суммированием.

public static int sumAll(List<Integer> numbers, Predicate<Integer> p) {

int total = 0;

for (int number : numbers) {

if (p.test(number)) {

total += number; } }

return total;}

Другими словами, мы передаем методу не только данные (список целых чисел), но и поведение (Predicate), определяя, как их использовать их. Таким путем мы удовлетворим все 3 требования с помощью одного более мощного метода:

sumAll(numbers, n -> true);

sumAll(numbers, n -> n % 2 == 0);

sumAll(numbers, n -> n > 3);

Для написания такой функции надо добавить оператор

import java.util.function.Predicate;