Введение
В этом лабе вы научитесь использовать два из наиболее важных функций 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.



