Потоковые операции Java



У меня есть объект, "элемент" с полями:
int: id
Строка: цены



Строка prices содержит одно или несколько значений цены, разделенных запятой.



Задача: используя потоковые операции, я хочу получить карту типа Map<Integer,Set<Integer>> из List<Item> items



Где ключ карты-id и множество имеет значение цены как целое число, извлеченное из строки цены.



В списке будут повторяющиеся идентификаторы и могут иметь разные строки цен.



Я придумал подход, который производит следующий результат:



Map<Integer, Set<List<Integer>>> itemStoresMapIntermediate = items.stream()
.collect(Collectors.groupingBy(Item::getItemId,Collectors.mapping(Item::getStoresAsIntList, Collectors.toSet())));


GetStoresAsIntList() возвращает список значений цен из строки prices в объекте.



Вышесказанное, конечно, не то, чего я хочу.
535   1  

1 ответ:

Если я правильно понял...

 Item item1 = new Item(1, "22,23,24");
 Item item2 = new Item(2, "33,34,35");
 Item item3 = new Item(1, "22,57,58");

 Map<Integer, Set<Integer>> map = Stream.of(item1, item2, item3)
            .collect(Collectors.toMap(
                    Item::getId,
                    i -> new HashSet<>(i.getStoresAsIntList()),
                    (left, right) -> {
                        left.addAll(right);
                        return left;
                    }, HashMap::new));

 System.out.println(map); // {1=[22, 23, 24, 57, 58], 2=[33, 34, 35]}

Comments

    Ничего не найдено.