Продвинутые советы и использование Stream API

Группировка элементов

Чтобы сгруппировать данные по какому-нибудь признаку, нам надо использовать метод collect() и метод Collectors.groupingBy().


Группировка списка рабочих по их должности (деление на списки)

Map<String, List<Worker>> map1 = workers.stream()
.collect(Collectors.groupingBy(Worker::getPosition));


Группировка списка рабочих по их должности (деление на множества)

Map<String, Set<Worker>> map2 = workers.stream()
.collect(
Collectors.groupingBy(
Worker::getPosition, Collectors.toSet()
)
);


Подсчет количества рабочих, занимаемых конкретную должность

Map<String, Long> map3 = workers.stream()
.collect(
Collectors.groupingBy(
Worker::getPosition, Collectors.counting()
)
);


Группировка списка рабочих по их должности, при этом нас интересуют только имена

Map<String, Set<String>> map4 = workers.stream()
.collect(
Collectors.groupingBy(
Worker::getPosition,
Collectors.mapping(
Worker::getName,
Collectors.toSet()
)
)
);


Расчет средней зарплаты для данной должности

Map<String, Double> map5 = workers.stream()
.collect(
Collectors.groupingBy(
Worker::getPosition,
Collectors.averagingInt(Worker::getSalary)
)
);


Группировка списка рабочих по их должности, рабочие представлены только именами единой строкой

Map<String, String> map6 = workers.stream()
.collect(
Collectors.groupingBy(
Worker::getPosition,
Collectors.mapping(
Worker::getName,
Collectors.joining(", ", "{","}")
)
)
);


Группировка списка рабочих по их должности и по возрасту.

Map<String, Map<Integer, List<Worker>>> collect = workers.stream()
.collect(
Collectors.groupingBy(
Worker::getPosition,
Collectors.groupingBy(Worker::getAge)
)
);


Заключение

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


Вместе с тем, важно помнить, что он не подходит для всех задач. Если ваша задача не соответствует шаблону "источник-преобразование-сбор", возможно, стоит обратиться к другим инструментам Java.


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