- •Лабораторная 8. Динамические структуры. Коллекции списки в c# и Java
- •Добавление элемента;
- •Динамические структуры данных
- •Списки, их виды Односвязный список
- •Двусвязный список
- •Классы c# для описания указанных типов данных Класс List и его методы
- •Класс LinkedList и его методы
- •Класс LinkedListNode представляет узел в LinkedList. Его свойства:
- •Классы-коллекции в Java
- •Классы-коллекции
- •Абстрактные классы
- •Понятие интерфейса в Java. Описание интерфейса
- •Реализация интерфейса
- •Интерфейсы-коллекции
- •Интерфейс Collection
- •Интерфейс List
- •Классы коллекций
- •Класс LinkedList
- •Лямбда - выражения в Java
- •В лямбда – выражение передаются не только данные, но и поведение
Лямбда - выражения в 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;
