在 Java 中将 map 流转换为 HashMap
Convert stream of map to HashMap in Java
我的class结构类似于
@Data
class Permission
{
String id;
Map<String,String> roles;
}
我有这样的 List<Permission>
权限,我正在尝试使用 streams
从这个 List
中获得 Map<String,String>
角色,方法如下:
permissions.stream().
.map(Permission::getRoles) //it is giving me Stream<Map<String,String>>
.collect() //How to collect to Hashmap ?
这样我就可以进一步遍历此映射以获得包含此 Hashmap
的所有键的 Set<String>
。简而言之,目标是:
- 从此列表中获取权限对象
- 然后从此对象
得到Map
- 然后将所有这些
Map
对象的键放入 Set<String>
键中,这样它将拥有来自步骤 (2)[=33= 的 Map
对象的所有键]
您想要一组中所有地图的键
你可以这样做。
- 流式传输权限
- 展平每个地图键集的流。
- 收集到一组
Set<String> keys = permissions.stream()
.flatMap(permission -> permission.getRoles().keySet().stream())
.collect(Collectors.toSet());
根据文档,无法保证 toSet()
的可变性。如果您想创建 API 的 HashSet
的实例,您可以将上面的收集器替换为:
.collect(Collectors.toCollection(HashSet::new));
请注意,无论集合实现如何,重复的键都将被丢弃。
我的class结构类似于
@Data
class Permission
{
String id;
Map<String,String> roles;
}
我有这样的 List<Permission>
权限,我正在尝试使用 streams
从这个 List
中获得 Map<String,String>
角色,方法如下:
permissions.stream().
.map(Permission::getRoles) //it is giving me Stream<Map<String,String>>
.collect() //How to collect to Hashmap ?
这样我就可以进一步遍历此映射以获得包含此 Hashmap
的所有键的 Set<String>
。简而言之,目标是:
- 从此列表中获取权限对象
- 然后从此对象 得到
- 然后将所有这些
Map
对象的键放入Set<String>
键中,这样它将拥有来自步骤 (2)[=33= 的Map
对象的所有键]
Map
您想要一组中所有地图的键
你可以这样做。
- 流式传输权限
- 展平每个地图键集的流。
- 收集到一组
Set<String> keys = permissions.stream()
.flatMap(permission -> permission.getRoles().keySet().stream())
.collect(Collectors.toSet());
根据文档,无法保证 toSet()
的可变性。如果您想创建 API 的 HashSet
的实例,您可以将上面的收集器替换为:
.collect(Collectors.toCollection(HashSet::new));
请注意,无论集合实现如何,重复的键都将被丢弃。