java - 将一组地图流式传输到一个地图中
问题描述
我有一组地图。内部映射可以有匹配的键,所以我想把它变成 a Map
of Collection
:
Collection<Map<String, Thing>>
=>Map<String, Collection<Thing>>
我试过的是:
Map<String, Collection<Thing>> newMap = oldCollection
.stream()
.map(Map::entrySet)
.collect(Collectors.groupingBy(
Entry::getKey,
Collectors.mapping(Entry::getValue, Collectors.toList())));
我觉得这应该可以工作,但我得到一个编译错误:
Type mismatch: cannot convert from Map<Object,List<Object>> to Map<String,Collection<Thing>>
有谁知道我做错了什么?
解决方案
oldCollection.stream().map(Map::entrySet)
创建一个Stream<Set<Map.Entry<String,Thing>>>
,但你需要一个Stream<Map.Entry<String,Thing>>
.
因此,您需要使用flatMap
:
Map<String, List<Thing>>
newMap = oldCollection.stream()
.flatMap(m->m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.toList())));
此外,由于您将分组值映射到 a List
,因此输出类型应该是Map<String, List<Thing>>
。
如果要保留当前的输出类型,可以更改Collectors.toList()
为。Collectors.toCollection(ArrayList::new)
推荐阅读
- docker - 显示所有 docker 卷的大小而不安装它们
- python - 如何使用工厂和伪造者在 Django 中生成唯一数据?
- python - GEOS_ERROR:ParseException:未知 WKB 类型 337
- maven - 解决来自 Maven 存储库的依赖项时出错
- machine-learning - 为什么深度学习中层数越多越好?
- c++ - 语法错误:Windows sdk 文件的“常量”
- javascript - 如何为多行和动画制作这个js动画效果?
- javascript - 如何在从 src 文件夹加载时以百分比显示加载
- apple-push-notifications - 在 PHP 中获取 APN 的提供者令牌
- java - java流加入本身是一个类的字段