Tengo una clase de Enum con derechos.
public enum UserRight {
SYSTEMMANAGEMENT, USERADMINISTRATION, ROLEADMINISTRATION,
STRUCTUREADMINISTRATION, DOCUMENTADMINISTRATION;
}
Ahora quiero cargar todos mis derechos en una lista, excepto SYSTEMMANAGEMENT. Lo hago ahora así:
availrightslist.addAll(Arrays.asList(UserRight.values()));
¿Cómo puedo cargar todos los derechos sin el derecho SYSTEMMANAGEMENT?
4 respuestas
Simplemente puede eliminarlo después de haber agregado todo:
availrightslist.remove(UserRight.SYSTEMMANAGEMENT);
O use algo de EnumSet
magia :
Set<UserRight> rights = EnumSet.complementOf(EnumSet.of(UserRight.SYSTEMMANAGEMENT));
En general, si tiene un Collection
de enum
s, se recomienda utilizar un EnumSet
. Porque tener un UserRight
dos veces realmente no tiene sentido.
No hay soporte de compilación para ocultar un valor de enumeración, debe filtrarlo manualmente:
List<UserRight> okRights = Arrays.stream(UserRights.values())
.filter(userRight -> userRight != UserRight.SYSTEMMANAGEMENT)
.collect(Collectors.toList());
availablerightslist.addall(okRights);
Simplemente puede eliminar su derecho no deseado.
Collections.addAll(availrightslist, UserRight.values())
availrightslist.remove(UserRight.SYSTEMMANAGEMENT);
O simplemente agrega lo que necesita.
for(UserRight right : UserRight.values()) {
if(right != UserRight.SYSTEMMANAGEMENT)
availrightslist.add(right);
}
Puedes probar esto, no estoy seguro de si es una solución óptima o no.
Arrays.asList(UserRight.values())
.stream()
.filter(value-> value != UserRight.SYSTEMMANAGEMENT)
.collect(Collectors.toList())
Nuevas preguntas
java
Java es un lenguaje de programación de alto nivel. Utilice esta etiqueta cuando tenga problemas para usar o comprender el idioma en sí. Esta etiqueta rara vez se usa sola y se usa con mayor frecuencia junto con [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] y [maven].