在 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>。简而言之,目标是:

  1. 从此列表中获取权限对象
  2. 然后从此对象
  3. 得到Map
  4. 然后将所有这些 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));

请注意,无论集合实现如何,重复的键都将被丢弃。