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?

3
sulox32 9 may. 2019 a las 17:19

4 respuestas

La mejor respuesta

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.

15
Lino 9 may. 2019 a las 14:21

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);
1
ChocolateAndCheese 9 may. 2019 a las 14:32

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);
}
2
cmoetzing 13 may. 2019 a las 07:45

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())
-1
Pshemo 9 may. 2019 a las 14:44