正确使用Java8 供应商消费者

Correct use of Java 8 supplier consumer

我还在为 Java8 与供应商和消费者苦苦挣扎,我有这个:

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 连接。