我仍在与Java 8的供应商和消费者作斗争,我有这个:
final Set<String> roles = new HashSet<>();
user.getRoleGroups().forEach(rg -> rg.getRoles().forEach(r -> roles.add(r.getName())));
从角色组列表内的角色列表中的角色名称中获取集。 很确定我可以在一行中使用 .stream().map() 和 RoleGroup::getRoles 和 Role::getName 来获取这个集合。但我不知道怎么做。
你很接近!要改用Stream
,请执行以下操作:
final Set<String> roles = user.getRoleGroups().stream()
.flatMap(g -> g.getRoles().stream())
.map(Role::getName)
.collect(Collectors.toSet());
使用flatMap()
是这里唯一棘手的部分。flatMap()
运算将一个元素转换为一个Stream
,它与其他元素的Streams
连接。