TGViewer
Библиотека Java разработчика Библиотека Java разработчика @bookjava · 10K subscribers
Post #3680 1.59K
📌 Stream API: Группировка данных в Java

Привет, друзья! Сегодня разберем мощную возможность Stream API – группировка данных с помощью Collectors.groupingBy(). Это отличный инструмент, когда нужно собирать элементы в группы по какому-то признаку.

📌 Как это работает?
Метод groupingBy используется в Collectors и позволяет группировать элементы по ключу, который мы указываем. Давайте рассмотрим на примере:


import java.util.*;
import java.util.stream.Collectors;

class Person {
String name;
String city;

Person(String name, String city) {
this.name = name;
this.city = city;
}

@Override
public String toString() {
return name;
}
}

public class GroupingExample {
public static void main(String[] args) {
List<Person> people = List.of(
new Person("Иван", "Москва"),
new Person("Анна", "Санкт-Петербург"),
new Person("Сергей", "Москва"),
new Person("Мария", "Казань"),
new Person("Алексей", "Санкт-Петербург")
);

Map<String, List<Person>> groupedByCity = people.stream()
.collect(Collectors.groupingBy(person -> person.city));

groupedByCity.forEach((city, residents) ->
System.out.println(city + ": " + residents)
);
}
}


📌 Разбор кода:
1. У нас есть список people с объектами Person, у которых есть name и city.
2. Мы применяем groupingBy, передавая person -> person.city в качестве критерия группировки.
3. Результат – Map<String, List<Person>>, где ключ – город, а значение – список людей из этого города.
4. Выводим результат, используя forEach.

📌 Выходные данные:

Москва: [Иван, Сергей]
Санкт-Петербург: [Анна, Алексей]
Казань: [Мария]


👉 Теперь представьте, что у вас есть заказы в интернет-магазине, и вам нужно сгруппировать их по статусу. Или у вас есть список сотрудников, и вы хотите разбить их по департаментам. groupingBy() – это универсальный инструмент, который решает такие задачи.

📌 Дополнительные фишки:
1. Подсчет количества элементов в группах:

Map<String, Long> countByCity = people.stream()
.collect(Collectors.groupingBy(p -> p.city, Collectors.counting()));


2. Группировка + редукция: (например, получение списка имен)

Map<String, Set<String>> namesByCity = people.stream()
.collect(Collectors.groupingBy(p -> p.city,
Collectors.mapping(p -> p.name, Collectors.toSet())));


👉@BookJava
  • 👍 6
More from @bookjava
  1. Sep 30, 2026Три похожих слова в Java — final, finally, finalize — но смысл у них совершенно разный. Ра…
  2. Sep 27, 2026🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking К…
  3. Sep 23, 2026Что такое механизм try-with-resources? Механизм try-with-resources в Java — это конструкци…
  4. Sep 21, 2026📌 picocli — это современная библиотека для создания CLI-приложений на Java. Она упрощает…
  5. Sep 18, 2026Double-brace инициализация в Java — это идиома, которая используется для инициализации кол…
  6. Sep 16, 2026🧠@Value vs @ConfigurationProperties — не выбирай наобум Оба способа хороши для конфигурац…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →