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