Продвинутые советы и использование 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, и безусловно, этот инструмент заслуживает времени, уделенного на его изучение.