Java 在集合中搜索
我有一个Role对象,其中有一组rolename,我想检查用户是否有特定的角色。告诉我如何最好地做到美丽和简洁 Role.javaJava 在集合中搜索,java,search,collections,set,Java,Search,Collections,Set,我有一个Role对象,其中有一组rolename,我想检查用户是否有特定的角色。告诉我如何最好地做到美丽和简洁 Role.java @Table(name = "roles") public class Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Enumerated(EnumType.STRING) @NaturalId @Co
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Enumerated(EnumType.STRING)
@NaturalId
@Column(length = 60)
private RoleName name;
RoleName.java:
public enum RoleName {
ROLE_ADMIN,
ROLE_MANAGER,
ROLE_CLIENT,
ROLE_USER,
}
现在,我的搜索结果如下所示:
boolean isFind = false;
for (Role role : user.getRoles()) {
isFind = role.getName().equals(RoleName.ROLE_CLIENT);
if (isFind) break;
}
但我真的不喜欢这种方式。您能推荐一个更好的选项吗?您可以使用流,例如:
boolean isFind =
user.getRoles()
.stream()
.map(Role::getName)
.anyMatch(n -> n == RoleName.ROLE_CLIENT);
记录:您可以使用==比较枚举。
user.getRoles()
返回什么类型?如果您可以将其设置为集
(理想情况下是枚举集
),那么整个代码将折叠为user.getRoles().contains(RoleName.ROLE\u CLIENT)
。所有集合都具有contains()
,因为它来自接口集合
如何使用contains()
?它将在角色
的集合中搜索类型角色名
。唯一的方法是在角色classTruecontains()
中高估equals
方法,它将测试角色是否包含相同的角色对象,而不是@Maxim所说的角色名