Файл: Что такое функциональное программирование и где оно применяется.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 243
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
2. BiConsumer
3. BinaryOperator
4. Function
5. Set
Collector позволяет выполнить операцию накопления с помощью метода collect() в Stream API. Он может использоваться для сборки элементов в различные структуры данных, такие как List, Set, Map или пользовательские коллекции.
Collector является мощным инструментом для агрегации данных в стриме и позволяет выполнять различные операции, такие как группировка, подсчет, суммирование, среднее значение и другие операции сокращения данных.
Метод Сollect? Как создать свой Collector?
Метод `collect()` в Stream API используется для выполнения операции накопления элементов стрима с использованием коллектора (`Collector`).
Синтаксис метода `collect()` выглядит следующим образом:
```
```
Он принимает в качестве аргумента коллектор, который определяет, как накоплять элементы стрима и как получить окончательный результат.
Для создания своего собственного коллектора вы можете реализовать интерфейс `Collector`. Вот шаблонный пример создания своего коллектора:
```java
import java.util.*;
import java.util.stream.Collector;
class MyCollector
// Метод supplier создает и возвращает пустой контейнер для накопления элементов
@Override
public Supplier
- > supplier() {
return ArrayList::new;
}
// Метод accumulator добавляет элементы
в контейнер
@Override
public BiConsumer
- , T> accumulator() {
return List::add;
}
// Метод combiner объединяет два контейнера для накопления элементов
@Override
public BinaryOperator
- > combiner() {
return (list1, list2) -> {
list1.addAll(list2);
return list1;
};
}
// Метод finisher преобразует контейнер для накопления элементов в результат окончательного значения
@Override
public Function
- , R> finisher() {
// Здесь можно выполнить необходимые преобразования для получения окончательного результата
// или просто вернуть полученный список без изменений
return (list) -> (R) list;
}
// Метод characteristics возвращает набор характеристик коллектора
@Override
public Set
// Указываем характеристики вашего коллектора, например, UNORDERED или CONCURRENT
return Collections.emptySet();
}
}
```
Вы можете создать экземпляр своего коллектора `MyCollector` и использовать его в методе `collect()` для накопления элементов стрима:
```java
List
List
.collect(new MyCollector<>());
System.out.println(result); // [1, 2, 3, 4, 5]
```
Обратите внимание, что в методе `finisher()` вы должны выполнить необходимые преобразования для получения окончательного результата или просто вернуть контейнер без изменений, если ваш коллектор должен возвращать такой же тип, как и контейнер для накопления (в данном случае `List
Класс Optional в Java
Класс `Optional` в Java представляет собой контейнер, который может содержать или не содержать некоторое значение. Он был введен в Java 8 в качестве средства для борьбы с проблемами, связанными с нулевыми значениями (`null`).
Основная цель `Optional` состоит в том, чтобы предоставить более безопасный и явный способ работы с возможным отсутствием значения, чем использование нулевых ссылок. `Optional` может быть использован для обозначения ситуаций, когда значение может быть отсутствующим или присутствовать.
Вот некоторые основные методы и концепции, связанные с `Optional`:
- Создание экземпляра `Optional`:
- `Optional.of(value)`: Создает `Optional`, содержащий заданное значение. Если значение равно `null`, будет выброшено исключение `NullPointerException`.
- `Optional.ofNullable(value)`: Создает `Optional`, содержащий заданное значение. Значение может быть как ненулевым, так и `null`.
- `Optional.empty()`: Создает пустой `Optional` без значения.
- Проверка наличия значения:
- `isPresent()`: Возвращает `true`, если `Optional` содержит значение, и `false`, если `Optional` пустой.
- Получение значения:
- `get()`: Возвращает значение из `Optional`, если оно присутствует. Если `Optional` пустой, будет выброшено исключение `NoSuchElementException`.
- Работа с отсутствующим значением:
- `orElse(defaultValue)`: Возвращает значение из `Optional`, если оно присутствует, иначе возвращает заданное значение по умолчанию.
- `orElseGet(supplier)`: Возвращает значение из `Optional`, если оно присутствует, иначе вызывает заданный поставщик (supplier) и возвращает его результат.
- `orElseThrow(exceptionSupplier)`: Возвращает значение из `Optional`, если оно присутствует, иначе выбрасывает исключение, созданное заданным поставщиком исключений.
`Optional` предоставляет механизм, чтобы избежать использования нулевых ссылок и облегчить обработку ситуаций, когда значение может быть отсутствующим. Это помогает улучшить безопасность и ясность кода, поскольку программисты явно указывают на возможность отсутствия значения и должны явно обрабатывать эту ситуацию.
Пример использования `Optional`:
```java
Optional
optionalValue.ifPresent(value -> System.out.println(value)); // Выводит: Hello
Optional
System.out.println(emptyOptional.orElse("Default Value")); // Выводит: Default Value
Optional