JLambda выражения и Stream API

JavaBeginner
Практиковаться сейчас

Введение

В этом лабе вы научитесь использовать два из наиболее важных функций Java 8 - лямбда-выражения и Stream API. Лямбда-выражения используются для создания анонимных функций, которые могут передаваться в качестве аргументов другим методам, в то время как Stream API используется для выполнения последовательности операций над коллекцией.

Настройка среды Java

Во - первых, настройте Java - окружение, установив последнюю версию Java на вашей системе. Вы можете скачать и установить Java с официального сайта. После установки откройте терминал и проверьте версию Java.

java -version

Создать Java-файл

Далее, создайте новый Java-файл в директории ~/project с именем LambdaExpressions.java.

touch ~/project/LambdaExpressions.java

В этом файле мы напишем код для реализации лямбда-выражений и Stream API.

Использовать выражение-лямбда для вычисления суммы двух чисел

Лямбда-выражения предоставляют простой способ создания анонимных функций. Создайте FunctionalInterface, который будет представлять функцию, которая принимает два числа в качестве входных данных и возвращает их сумму.

interface Calculator {
  int sum(int a, int b);
}

Далее, мы можем использовать лямбда-выражение для создания объекта этого интерфейса и затем вызвать функцию sum() с использованием этого объекта.

  Calculator adder = (a, b) -> a + b;
  int result = adder.sum(10, 20);
  System.out.println("Result: " + result);

Теперь скомпилируйте и запустите этот код с использованием следующей команды:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

Вывод должен быть:

Result: 30

Пройти по коллекции с использованием Stream API

Stream API используется для выполнения последовательности операций над коллекцией. В этом шаге мы научимся перебирать коллекцию строк и фильтровать строки, которые начинаются с "A".

Создайте список строк, содержащий несколько имен для работы.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Andy");

Далее, используйте Stream API для перебора этой коллекции, фильтрации строк, которые начинаются с "A", и вывода оставшихся на консоль.

  names.stream().filter(s -> s.startsWith("A")).forEach(System.out::println);

Теперь скомпилируйте и запустите этот код с использованием следующей команды:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

Вывод должен быть:

Alice
Andy

Использовать Stream API для нахождения максимального и минимального значений в списке целых чисел

Stream API предоставляет способ выполнять последовательность операций над коллекцией. В этом шаге мы научимся использовать Stream API для нахождения максимального и минимального элементов в списке целых чисел.

Создайте список целых чисел

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Найдите максимальный элемент списка с использованием Stream API.

Optional<Integer> maxNum = numbers.stream().max(Integer::compareTo);
System.out.println("Maximum number: " + maxNum.get());

Найдите минимальный элемент списка с использованием Stream API.

Optional<Integer> minNum = numbers.stream().min(Integer::compareTo);
System.out.println("Minimum number: " + minNum.get());

Теперь скомпилируйте и запустите этот код с использованием следующей команды:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

Вывод должен быть:

Maximum number: 30
Minimum number: 2

Использовать forEach() для вывода элементов списка

Мы можем использовать метод forEach() Stream API для перебора списка и выполнения действия над каждым элементом.

Создайте список строк, содержащий несколько имен для работы.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");

Выведите все элементы списка с использованием метода forEach().

names.stream().forEach(System.out::println);

Теперь скомпилируйте и запустите этот код с использованием следующей команды:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

Вывод должен быть:

Alice
Bob
Charlie
Dave

Использовать Stream API для сортировки коллекции

Stream API можно использовать для сортировки коллекции. В этом шаге мы научимся сортировать список целых чисел по возрастанию.

Создайте список целых чисел для работы.

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

Отсортируйте список по возрастанию с использованием метода sorted() Stream API.

numbers.stream().sorted().forEach(System.out::println);

Теперь скомпилируйте и запустите этот код с использованием следующей команды:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

Вывод должен быть:

1
2
3
4
5

Используйте Stream API для фильтрации и сортировки коллекции

В этом шаге мы будем использовать Stream API для фильтрации и сортировки коллекции целых чисел.

Создайте список целых чисел для работы.

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Отфильтруйте только четные числа и отсортируйте их в порядке убывания с использованием метода sorted().

numbers.stream().filter(n -> n % 2 == 0).sorted(Comparator.reverseOrder()).forEach(System.out::println);

Теперь скомпилируйте и запустите этот код с использованием следующей команды:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

Вывод должен быть:

30
20
10
4
2

Используйте Stream API для вычисления среднего значения коллекции

В этом шаге мы научимся использовать Stream API для вычисления среднего значения коллекции целых чисел.

Создайте список целых чисел для работы.

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Используйте метод average() Stream API для вычисления среднего значения списка.

OptionalDouble avg = numbers.stream().mapToInt(Integer::intValue).average();
System.out.println("Average: " + avg.getAsDouble());

Теперь скомпилируйте и запустите этот код с использованием следующей команды:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

Вывод должен быть:

Average: 12.0

Создайте объект Optional и проверьте, является ли он пустым или нет

В этом шаге мы узнаем, что такое Optional и как создать объект Optional.

Создайте объект Optional для пустой строки.

Optional<String> emptyString = Optional.empty();

Проверьте, является ли этот объект пустым, используя метод isPresent().

if(emptyString.isPresent()) {
    System.out.println(emptyString.get());
}
else {
    System.out.println("No value");
}

Теперь скомпилируйте и запустите этот код с использованием следующей команды:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

Вывод должен быть:

No value

Резюме

В этом практическом занятии мы узнали, как использовать два из наиболее важных возможностей Java 8 — выражения-лямбда и Stream API. Мы узнали, как использовать выражения-лямбда для создания анонимных функций, как использовать Stream API для выполнения последовательности операций над коллекцией, и как создавать объекты Optional и проверять, являются ли они пустыми. Мы также увидели, как использовать Stream API для сортировки, фильтрации и вычисления среднего значения коллекции. Освоив эти возможности, мы можем писать эффективный и чистый код на Java 8.