Сегодня я покажу вам простой, но мощный приём, который помогает упростить работу с коллекциями в Java — Collectors.collectingAndThen.



Если вы когда-нибудь писали что-то вроде:

List<String> list = someStream
.collect(Collectors.toList());
return Collections.unmodifiableList(list);
то collectingAndThen сделает это в одну строку:

List<String> list = someStream.collect(
Collectors.collectingAndThen(
Collectors.toList(),
Collections::unmodifiableList
)
);

Где это может пригодиться?

– Возвращаете коллекцию из метода и не хотите, чтобы кто-то её изменял
– Хотите обернуть результат в Optional, Set, Map, EnumMap и т.д.
– Нужно после сбора в Stream ещё что-то сделать над результатом (например, отсортировать, фильтровать, обернуть)

Ещё пример:

Optional<String> maxName = people.stream()
.map(Person::getName)
.collect(Collectors.collectingAndThen(
Collectors.maxBy(Comparator.naturalOrder()),
Optional::ofNullable
));

Этот метод часто остаётся в тени, но он может существенно упростить код и сделать его чище. Попробуйте использовать его в своём проекте 😉

👉 @BookJava
Просмотры: 815
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти