Лямбда-выражения (Lambda expressions), появившиеся в Java 8, позволяют писать код в функциональном стиле. Это компактный способ записи анонимных функций.
Основной синтаксис: (параметры) -> { тело_функции }.
- Если параметр один, скобки вокруг него можно опустить:
x -> x * 2. - Если тело функции состоит из одной строки, фигурные скобки и слово
returnможно опустить.
Лямбды часто используются с функциональными интерфейсами (где есть только один абстрактный метод) и в Stream API. Этот тренажер поможет вам освоить стрелочный синтаксис -> и научиться читать сокращенные записи кода.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Оператор лямбды
В этом задании вам нужно дополнить фрагмент кода на Java, используя лямбда-выражение. Код выводит элементы списка строк с помощью метода forEach. Вам необходимо вставить оператор лямбды '->' между аргументом и телом лямбда-выражения, чтобы код работал корректно. Обратите внимание на синтаксис лямбда-выражений в Java: (параметры) -> { тело } или (параметры) -> выражение. В данном случае используется вариант с одним параметром без фигурных скобок.
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Anna", "Bob", "Charlie");
names.forEach(name input1S System.out.println(name));
}
}2. Параметры лямбды
В этом задании вам нужно правильно оформить параметры лямбда-выражения для сложения двух чисел. В коде ниже два лямбда-выражения, в каждом из которых пропущен список параметров. Используя выпадающие списки, выберите правильный синтаксис для каждого пропуска. Обратите внимание на необходимость скобок при двух параметрах и на соответствие типов параметров типу функционального интерфейса BinaryOperator
BinaryOperator<Integer> sum1 = input1S -> a + b;
BinaryOperator<Integer> sum2 = input2S -> a + b;3. Валидный синтаксис
Перед вами несколько фрагментов кода, представляющих лямбда-выражения в Java. Распределите их по двум категориям: 'Правильная лямбда' и 'Ошибка синтаксиса'. Обратите внимание на синтаксис лямбда-выражений: они могут иметь параметры (со скобками или без), стрелку -> и тело (выражение или блок). Лямбда должна быть корректной в контексте функционального интерфейса.
s -> s.length()-> System.out.println()(x) -> { return x; }a, b -> a + b() -> "Hello"(int n) -> n * n4. Эволюция сокращения
Перед вами три варианта записи одного и того же кода на Java, реализующего компаратор для строк. Эти варианты демонстрируют эволюцию сокращения синтаксиса: от анонимного класса через полную лямбду к краткой лямбде. Блоки кода перемешаны. Ваша задача — расставить их в порядке от самого длинного (многословного) к самому короткому (краткому). Обратите внимание на количество строк и общий объём кода в каждом варианте.
Comparator<String> comparator = (s1, s2) -> s1.compareTo(s2);Comparator<String> comparator = (String s1, String s2) -> {
return s1.compareTo(s2);
};Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
};5. Результат вычисления
Проанализируйте приведённый код на Java, использующий лямбда-выражение для реализации функционального интерфейса Operation. Определите, какое значение будет выведено в консоль после выполнения программы. Обратите внимание на синтаксис лямбда-выражения и то, как оно передаётся в метод.
@FunctionalInterface
interface Operation {
int execute(int a, int b);
}
public class Main {
public static void main(String[] args) {
Operation multiply = (x, y) -> x * y;
int result = multiply.execute(5, 3);
System.out.println(result);
}
}6. Структура выражения
Перед вами фрагмент кода на Java, содержащий лямбда-выражение. Внимательно изучите его структуру. Ваша задача — выделить два ключевых элемента лямбда-выражения: блок аргументов (список параметров) и тело выражения (выполняемый код). Не отмечайте стрелку `->`, разделяющую эти части, или другие элементы кода, такие как объявление переменной или точку с запятой.
// Пример использования лямбда-выражения в методе
Runnable task = {{(int count, String name)~|~t1}} {{->~|~t2}} {{
for (int i = 0; i < count; i++) {
System.out.println("Hello, " + name);
}
~|~t3}};
// Конец объявления7. Сортировка списка
Из предложенных строк соберите корректный вызов метода sort для списка строк, который сортирует строки по длине с помощью лямбда-выражения. Лишние строки в решение включать не нужно. Учтите, что вызов метода должен быть синтаксически корректным и использовать лямбда-выражение для сравнения длин строк.
list.sort((s1, s2) ->Integer.compare(s1.length(), s2.length()));list.sort((s1, s2) -> s1.compareTo(s2));list.sort(null);8. Блочное тело лямбды
В данном фрагменте кода на Java используется лямбда-выражение с блочным телом, но допущена синтаксическая ошибка, из-за которой код не скомпилируется. Найдите строку с ошибкой и исправьте её, чтобы лямбда-выражение корректно возвращало результат. Обратите внимание на правила написания блочных лямбда-выражений, когда тело состоит из нескольких операторов.
import java.util.function.Function; public class Main { public static void main(String[] args) { Function<Integer, Integer> square = (x) -> { int result = x * x; result; }; System.out.println(square.apply(5)); }}9. Запуск Runnable
В данном задании рассматривается использование лямбда-выражения для создания экземпляра интерфейса Runnable. Проанализируйте приведённый фрагмент кода и определите, что будет выведено в консоль после его выполнения. Введите результат в виде одной строки без пробелов и дополнительных символов.
public class Main {
public static void main(String[] args) {
Runnable task = () -> System.out.print("Go");
task.run();
task.run();
}
}