public class Role implements Serializable {
/** other fields */
private Set<Privilege> privileges;
/* setters and getters */
}
//特权类
public class Privilege implements Serializable {
@Column(name = "name", length = 255)
private String name;
}
跟我有角色数据;
Set<Role> roles = SecuUtil.getUser().getRoles();
我如何检查In特权是否包含name =&#34; test&#34;并返回true或false
如何在Java 8中使用stream,最有效率
我们如何搜索集合内的集合。
对于一组我可以这样做
roles.stream().anyMatch(str -> str.getPrivileges().equals("test"));
答案 0 :(得分:1)
如果我已正确解密您的问题,您的用户具有一组角色,并且您想要检查该集是否包含任何包含名称为"test"
的权限的角色。
如果这是你想要的,你可以通过将角色/特权平面映射到一组特权来实现。
if (roles.stream()
.flatMap(role -> role.getPrivileges().stream())
.anyMatch(pr -> "test".equals(pr.getName()))) {
// do stuff
}
这是有效的&#34;只要它找到一个匹配的特权就会停止。