Как построить картукарта из списка <Object> - PullRequest
0 голосов
/ 19 октября 2018

Я создаю idMap следующим образом:

class Item {
    private int id;
    private int skuId;
    //some getter and setter
}

Map<Integer, List<Integer>> buildIdMap(List<Item> items) {

    Map<Integer, List<Integer> idMap = Maps.newHashMap();

    for (Item item : items) {
        if (!idMap.contains(item.getId())) {
            idMap.put(item.getId(), List.newArrayList());
        }
        idMap.put(item.getId(), item.getSkuId());
    }
    return idMap;
}

как я могу использовать guava или java8 для того же?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Вы можете сделать это так, используя Java8,

Map<Integer, List<Integer>> idMap = items.stream()
        .collect(Collectors.groupingBy(Item::getId, 
                Collectors.mapping(Item::getSkuId, Collectors.toList())));
0 голосов
/ 19 октября 2018

Используйте Guava's Multimaps.index(Iterable<V>,Function<? super V,K>):

Multimap<Integer, Item> buildIdMap(List<Item> items) {
  return Multimaps.index(items, Item::getId);
}

Я считаю, что это не совсем то, что вы просили, но это сделает работу лучше, чем вы ожидаете, применяя свой метод.

...