java - 合并 Group by 中的两个地图
问题描述
我有物品清单,
class Item {
int id;
String name;
Map<String, String> map;
}
Item item1 = new Item(11, "name1", Map.of("k1", "v1"));
Item item2 = new Item(11, "name1", Map.of("k2", "v2"));
Item item3 = new Item(22, "name2", Map.of("k3", "v3"));
.
.
.
List<Item> list = List.of(item1, item2, item3 ...);
我想按 id 分组,但地图值保留不同的值,如下所示,
List<Item> output = [ 11, "name1", map: { ["k1", "v1"],["k2", "v2"])) ], [ 22, "name2", map: { ["k3", "v3"] ] .....;
我尝试使用 group by 并返回,我怎样才能在其中保留地图?
Map<Integer, List<Item>> collect = list.stream()
.collect(Collectors.groupingBy(Item::getId, Collectors.toList()));
解决方案
要解决您的问题,您需要遍历这些值,并创建一个新项目,并将所有地图分组为一个:
List<Item> response = list.stream()
.collect(Collectors.groupingBy(
Item::getId, Collectors.toList()))
.values().stream()
.map(v -> {
Item item = v.get(0);
Map<String, String> map = v.stream()
.flatMap(e -> e.getMap().entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(a, b) -> a));
return new Item(item.getId(), item.getName(), map);
}).collect(Collectors.toList());
推荐阅读
- objective-c - 如何在 Objective-C 中创建通用属性?
- r - 从多个页面抓取数据时如何处理异常?
- c# - 如何找出哪个任务已完成
- c++ - Clang 不会在编译时评估非 constexpr 变量的 constexpr 函数的值
- android - BILLING_RESPONSE_RESULT_DEVELOPER_ERROR
- javascript - 点击 JS 事件触发时内容高度发生变化
- c++ - 如何抑制“module_attach”/“module_detach”调试器日志
- matplotlib - 如何让紧密的边界框尊重隐形艺术家?
- swift - Swift 中带背景的计时器
- android - 如何在 android 谷歌地图中显示印度泰米尔语文本