Как скрыть значение Enum в Java? - PullRequest
3 голосов
/ 09 мая 2019

У меня есть класс Enum с правами.

public enum UserRight {
    SYSTEMMANAGEMENT, USERADMINISTRATION, ROLEADMINISTRATION, 
    STRUCTUREADMINISTRATION, DOCUMENTADMINISTRATION;
}

Теперь я хочу загрузить все свои права в список, кроме SYSTEMMANAGEMENT.Я делаю это сейчас так:

availrightslist.addAll(Arrays.asList(UserRight.values()));

Как я могу загрузить все права без права SYSTEMMANAGEMENT?

Ответы [ 4 ]

13 голосов
/ 09 мая 2019

Вы можете просто удалить его после того, как добавили все:

availrightslist.remove(UserRight.SYSTEMMANAGEMENT);

Или использовать немного EnumSet magic :

Set<UserRight> rights = EnumSet.complementOf(EnumSet.of(UserRight.SYSTEMMANAGEMENT));

Обычно, если выиметь Collection из enum с, рекомендуется использовать EnumSet.Потому что иметь UserRight два раза на самом деле не имеет смысла.

2 голосов
/ 09 мая 2019

Вы можете просто удалить свое нежелательное право.

Collections.addAll(availrightslist, UserRight.values())
availrightslist.remove(UserRight.SYSTEMMANAGEMENT);

Или просто добавить то, что вам нужно.

for(UserRight right : UserRight.values()) {
    if(right != UserRight.SYSTEMMANAGEMENT)
        availrightslist.add(right);
}
1 голос
/ 09 мая 2019

Нет встроенной поддержки для сокрытия значения перечисления, вы должны отфильтровать его вручную:

List<UserRight> okRights = Arrays.stream(UserRights.values())
    .filter(userRight -> userRight != UserRight.SYSTEMMANAGEMENT)
    .collect(Collectors.toList());
availablerightslist.addall(okRights);
0 голосов
/ 09 мая 2019

вы можете попробовать это, я не уверен, является ли это оптимальным решением или нет.

Arrays.asList(UserRight.values())
      .stream()
      .filter(value-> value != UserRight.SYSTEMMANAGEMENT)
      .collect(Collectors.toList())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...