gpt4 book ai didi

java - 如何使用 Java 8 对同一个自定义对象执行多个操作

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:22:29 24 4
gpt4 key购买 nike

我有一个 Role 对象,它包含 roleName、roleId 和 rolePermissions,它也是一个权限对象列表。

现在我想检索 roleName 并将其添加到 Set 并从 permissionList 检索所有权限并添加到同一个 Set 以使用 Java 8 之前的版本实现此目的我使用以下代码实现了

   for (Role role : roleList) {
authorities.add(new SimpleGrantedAuthority(role.getRoleName()));
List<Permission> permissions = role.getPermissions();
for (Permission permission : permissions) {
authorities
.add(new SimpleGrantedAuthority("ROLE_" + permission.getName()));
}
}

使用 Java8 我已经实现了同样的使用

Set<GrantedAuthority> authorities = new HashSet<>();
roleList.stream().parallel().peek(role -> authorities.add(new SimpleGrantedAuthority(role.getRoleName())))
.forEach(role -> role.getPermissions()
.forEach(p -> authorities.add(new SimpleGrantedAuthority("ROLE_" + p.getName()))));

我觉得我们没有充分利用 Java8 的全部功能,上面的实现方式也不是正确的。如何更有效地实现同样的目标?

最佳答案

您可以使用 flatMap 的组合和 Stream.concat :

Set<GrantedAuthority> authorities =
roleList.stream()
.flatMap(r->Stream.concat(Stream.of(new SimpleGrantedAuthority(r.getRoleName())),
r.getPermissions().stream().map(p->new SimpleGrantedAuthority("ROLE_" + p.getName()))))
.collect(Collectors.toSet());

关于java - 如何使用 Java 8 对同一个自定义对象执行多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40345812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com