Удалить элемент из списка enum в java - PullRequest
0 голосов
/ 27 марта 2019

Я создал enum и назначил там несколько переменных.

public class User{
    // few attributes, constructors , getters, setters

    public enum Role{
        USER,
        DEPARTMENT_HEAD,
        COMPANY_ADMIN,
        SYSTEM_ADMIN,
        MANAGER;
    }
}

Мне нужно удалить одну переменную, если условие истинно.

// getting all attributes inside list
List<Role> roles=new ArrayList<Role>(new User().getRoles());

// try to remove
roles.removeIf(p -> p.equals("SYSTEM_ADMIN"));

, но при печати элемент не был удален.Как я могу удалить?Заранее спасибо.

Ответы [ 5 ]

2 голосов
/ 27 марта 2019

Если вы хотите сравнить со строкой, просто используйте .name()

  roles.removeIf( p -> p.name().equals("SYSTEM_ADMIN"));
2 голосов
/ 27 марта 2019

Вы также можете использовать ссылку на статический метод:

roles.removeIf(Role.SYSTEM_ADMIN::equals);

Как указывает @Cascader, вы можете использовать EnumSet вместо ArrayList. Бесполезно назначать пользователю одну и ту же роль дважды. Контракт интерфейса Set предотвращает это.

2 голосов
/ 27 марта 2019

Это потому, что вы сравниваете его с String, а не с перечислением.Это делает работу:

roles.removeIf(p -> p.equals(Role.SYSTEM_ADMIN));
1 голос
/ 27 марта 2019

Это потому, что вы сравниваете String "SYSTEM_ADMIN" вместо enum.Изменение, как показано ниже, будет работать,

roles.removeIf(p -> p.equals(Role.SYSTEM_ADMIN));
1 голос
/ 27 марта 2019

Вы можете попробовать как снизу

roles.removeIf(p -> p.equals(Role.SYSTEM_ADMIN));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...