Как Collectors.groupingBy и Collectors.partitioningBy работают внутри jdk8? - PullRequest
0 голосов
/ 25 июня 2019

Что такое внутренняя структура и как она работает 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]}
...