Группировка по внутреннему типу элемента коллекции в коллекции - PullRequest
0 голосов
/ 05 мая 2018

у меня

List<Shop> shops;

class Shop {
   private Long id;
   private String name;
   private List<Supplier> suppliers;
}

class Supplier {
   private Long id;
   private String supplierName;
}

То, что я хочу получить, это

Map<Supplier, List<Shop>> supplierShopsMap;

Как это сделать с помощью Java Streams?

1 Ответ

0 голосов
/ 05 мая 2018

Вы должны переопределить equal() и hashCode() в Supplier классе для группировки.

Map<Supplier, List<Shop>> result = shops.stream()
       .flatMap(s -> s.getSuppliers().stream()
                           .map(sup -> new SimpleEntry<>(sup, s))
       .collect(groupingBy(Entry::getKey,                 // This step requires Supplier equal function
                           mapping(Entry::getValue, toList())));

Если вы не можете изменить класс Supplier для поддержки equal(), вы должны создать карту Supplier

Редактировать

Как указывал @jorn vernee, мы можем использовать flatMap напрямую, без предварительной записи в список. Это огромный импульс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...