Искать в Набор коллекций - PullRequest
0 голосов
/ 05 октября 2018

У меня есть объект Role, в котором есть набор Rolenames, я хочу проверить, есть ли у пользователя определенная роль.Скажите, как лучше сделать это, чтобы быть красивым и лаконичным.

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;
        }

Но мне не очень нравится этот путь.Можете ли вы предложить лучший вариант?

1 Ответ

0 голосов
/ 05 октября 2018

Вы можете использовать поток, такой как:

boolean isFind = 
    user.getRoles()
        .stream()
        .map(Role::getName)
        .anyMatch(n -> n == RoleName.ROLE_CLIENT);
...