0

我仍在为 Java 8 的供应商和消费者苦苦挣扎,我有这个:

final Set<String> roles = new HashSet<>();
user.getRoleGroups().forEach(rg -> rg.getRoles().forEach(r -> roles.add(r.getName())));

从 RoleGroups 列表中的 Roles 列表中的角色名称获取 Set。很确定我可以在一行中使用 .stream().map() 和 RoleGroup::getRoles 和 Role::getName 来获取这个 Set。但我不知道怎么做。

4

1 回答 1

1

你很接近!要改用 a Stream,请执行以下操作:

final Set<String> roles = user.getRoleGroups().stream()
   .flatMap(g -> g.getRoles().stream())
   .map(Role::getName)
   .collect(Collectors.toSet());

使用flatMap()是这里唯一棘手的部分。该flatMap()操作将一个元素转换为 a Stream,并将其与Streams来自其他元素的 连接起来。

于 2021-08-05T15:07:34.243 回答