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?
4 Réponses :
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.
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);
availablerightslist.addAll (Arrays.asList (UserRight.values ()))
peut être simplifié en Collections.addAll (availablerightslist, UserRight.values ())
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);
Arrays.asList () renvoie une liste de taille fixe. Vous ne pouvez pas appeler remove () dessus.
@DodgyCodeException Merci pour la correction, mettra à jour.
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())
Au lieu de Arrays.asList (UserRight.values ()). Stream ()
, vous pouvez utiliser Arrays.stream (UserRight.values ())
directement