我有一个对象,“Item”包含字段: int:id 字符串:价格
字符串价格包含以逗号分隔的一个或多个价格值。
问题:使用流操作我想要一个Map<Integer,Set<Integer>>
List<Item> items
的地图
其中Map的键是id,Set的值是从String价格中提取的Integer值。
列表中会有重复的ID,并且可以有不同的价格字符串。
我想出了一种产生以下结果的方法:
Map<Integer, Set<List<Integer>>> itemStoresMapIntermediate = items.stream()
.collect(Collectors.groupingBy(Item::getItemId,Collectors.mapping(Item::getStoresAsIntList, Collectors.toSet())));
getStoresAsIntList()返回对象中String价格的价格值列表。
以上肯定不是我想要的。
答案 0 :(得分: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]}