Что такое внутренняя структура и как она работает groupingBy
и partitioningBy
внутри Java 8
.
К вашему сведению: я знаю, что такое использование Collectors.groupingBy
и Collectors.partitioningBy
.
Давайте рассмотрим поток из Employee
объектов:
+----------+------------+-----------------+
| Name | City | Number of Sales |
+----------+------------+-----------------+
| Alice | London | 200 |
| Bob | London | 150 |
| Charles | New York | 160 |
| Dorothy | Hong Kong | 190 |
+----------+------------+-----------------+
Группировка : Предположим, мы хотим сгруппировать employee
, которые принадлежат одному и тому же city
.
Map<String, List<Employee>> employeesbycity =
employees.stream().collect( Collectors.groupingBy(Employee::getCity));
Output: {New York=[Charles], Hong Kong=[Dorothy], London=[Alice, Bob]}
Разделение: Разделение - это особый вид группировки, в котором результирующая карта содержит не более двух разных групп - одна для истинных и одна для ложных.
Map<Boolean, List<Employee>> partitioned =
employees.stream().collect( Collectors.partitioningBy(e -> e.getNumSales() > 150));
Выход:
{false=[Bob], true=[Alice, Charles, Dorothy]}