3
votes

Comment masquer une valeur d'énumération en Java?

J'ai une classe Enum avec des droits.

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

Maintenant, je veux charger tous mes droits dans une liste sauf SYSTEMMANAGEMENT. Je le fais maintenant comme ceci:

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

Comment puis-je charger tous les droits sans le droit SYSTEMMANAGEMENT?


0 commentaires

4 Réponses :


15
votes

Vous pouvez simplement le supprimer après avoir tout ajouté:

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

Ou utiliser un peu de EnumSet magie :

availrightslist.remove(UserRight.SYSTEMMANAGEMENT);

Généralement, si vous avez une Collection de enum s, il est recommandé d'utiliser un EnumSet . Parce qu'avoir un UserRight deux fois n'a pas vraiment de sens.


0 commentaires

2
votes

Vous pouvez simplement supprimer votre droit indésirable.

for(UserRight right : UserRight.values()) {
    if(right != UserRight.SYSTEMMANAGEMENT)
        availrightslist.add(right);
}

Ou vous ajoutez simplement ce dont vous avez besoin.

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


1 commentaires

availablerightslist.addAll (Arrays.asList (UserRight.values ​​())) peut être simplifié en Collections.addAll (availablerightslist, UserRight.values ​​())



1
votes

Il n'y a pas de support pour masquer une valeur d'énumération, vous devez la filtrer manuellement:

List<UserRight> okRights = Arrays.stream(UserRights.values())
    .filter(userRight -> userRight != UserRight.SYSTEMMANAGEMENT)
    .collect(Collectors.toList());
availablerightslist.addall(okRights);


2 commentaires

Arrays.asList () renvoie une liste de taille fixe. Vous ne pouvez pas appeler remove () dessus.


@DodgyCodeException Merci pour la correction, mettra à jour.



-1
votes

vous pouvez essayer ceci, je ne sais pas si c'est une solution optimale ou non.

Arrays.asList(UserRight.values())
      .stream()
      .filter(value-> value != UserRight.SYSTEMMANAGEMENT)
      .collect(Collectors.toList())


1 commentaires

Au lieu de Arrays.asList (UserRight.values ​​()). Stream () , vous pouvez utiliser Arrays.stream (UserRight.values ​​()) directement