Одно элемента в нескольких группах при группировке с потоком API

user902383:

Я обзор некоторый старый код, где я группировать элементы. Это выглядит более или менее, как это:

Map<Long,List<Items>> groupedItems = ...
for (long groupid : groups){
    for (Item item :items){
        if (isGroupAccepting(item.getId(),groupid) || groupid == item.getGroup()) {
            groupedItems.get(groupid).add(item);
        }
    }
}

Я планировал заменить его, используя группировку из потока API, но я застрял. Он отлично работает на мое второе состояние, но как иметь дело с первым, где элемент должен быть добавлен к каждой группе, которая принимает этот вид товара? Является ли это на самом деле возможно, или я борюсь безнадежным делом здесь?

Они были:

Вы можете создавать пары все допустимые идентификаторы групп и предметы, а затем сгруппировать их по группам ID:

Map<Long,List<Item>> groupedItems =
    groups.stream()
          .flatMap(g -> items.stream()
                             .filter(i -> isGroupAccepting(i.getId(),g) || g == i.getGroup())
                             .map(i -> new SimpleEnty<>(g,i))
          .collect(Collectors.groupingBy(Map.Entry::getKey,
                   Collectors.mapping(Map.Entry::getValue,
                                      Collectors.toList())));

рекомендация

отhttp://43.154.161.224:23101/article/api/json?id=120036&siteId=1