Java流操作

roh*_*hit 2 java-8 java-stream

我有一个对象,"Item",带有字段:int:id String:price

字符串价格包含一个或多个以逗号分隔的价格值.

问题:使用流操作我要地图的类型,Map<Integer,Set<Integer>>List<Item> items

其中Map的键是id,Set的值是从String价格中提取的整数.

列表中会有重复的ID,并且可以有不同的价格字符串.

我想出了一种产生以下结果的方法:

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

getStoresAsIntList()返回对象中String价格的价格值列表.

以上肯定不是我想要的.

Eug*_*ene 5

如果我理解正确的话......

 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]}
Run Code Online (Sandbox Code Playgroud)