Java 在集合中搜索

Java 在集合中搜索,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

我有一个Role对象,其中有一组rolename,我想检查用户是否有特定的角色。告诉我如何最好地做到美丽和简洁

Role.java

@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()
?它将在
角色
的集合中搜索类型
角色名
。唯一的方法是在
角色
classTrue
contains()
中高估
equals
方法,它将测试
角色
是否包含相同的
角色
对象,而不是@Maxim所说的
角色名