【问题标题】:Convert stream of map to HashMap in Java在Java中将映射流转换为HashMap
【发布时间】:2022-01-20 14:49:39
【问题描述】:

我的类结构类似于

@Data    
class Permission
    {
      String id;
      Map<String,String> roles;
    }

我拥有这样的List&lt;Permission&gt; 权限,我正在尝试使用streams 从List 获取Map&lt;String,String&gt; 角色,方法是:

permissions.stream().
                .map(Permission::getRoles) //it is giving me Stream<Map<String,String>>
                .collect()  //How to collect to Hashmap ?
            

这样我就可以进一步迭代此映射以获取包含此Hashmap 的所有键的Set&lt;String&gt;。简而言之,目标是:

  1. 从此列表中获取权限对象
  2. 然后从此对象中获取Map
  3. 然后将所有这些Map 对象的键放入Set&lt;String&gt; 键中,这样它将具有步骤(2) 中Map 对象的所有键

【问题讨论】:

    标签: java hashmap java-stream


    【解决方案1】:

    你想要一个集合中所有地图的键

    你可以这样做。

    • 流式传输权限
    • 展平每个地图键集的流。
    • 收集到一个集合
    Set<String> keys = permissions.stream()
            .flatMap(permission -> permission.getRoles().keySet().stream())
            .collect(Collectors.toSet());
    

    根据文档,不能保证toSet() 的可变性。如果要创建 API 的 HashSet 的实例,可以将上述收集器替换为:
    .collect(Collectors.toCollection(HashSet::new));

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      相关资源
      最近更新 更多