如何在Java中隐藏枚举值?

如何在Java中隐藏枚举值?,java,enums,Java,Enums,我有一个拥有权限的枚举类 public enum UserRight { SYSTEMMANAGEMENT, USERADMINISTRATION, ROLEADMINISTRATION, STRUCTUREADMINISTRATION, DOCUMENTADMINISTRATION; } 现在,我想将除SYSTEMMANAGEMENT之外的所有权限加载到列表中。 我现在这样做: availrightslist.addAll(Arrays.asList(UserRight.v

我有一个拥有权限的枚举类

public enum UserRight {
    SYSTEMMANAGEMENT, USERADMINISTRATION, ROLEADMINISTRATION, 
    STRUCTUREADMINISTRATION, DOCUMENTADMINISTRATION;
}
现在,我想将除SYSTEMMANAGEMENT之外的所有权限加载到列表中。 我现在这样做:

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

在没有系统管理权限的情况下,如何加载所有权限?

您可以在添加所有权限后将其删除:

availrightslist.remove(UserRight.SYSTEMMANAGEMENT);
或者使用一些
EnumSet
magic:

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

通常,如果您有
枚举的
集合
,建议使用
枚举集
。因为拥有一个
UserRight
两次是没有意义的。

你可以简单地删除你不想要的权限

Collections.addAll(availrightslist, UserRight.values())
availrightslist.remove(UserRight.SYSTEMMANAGEMENT);
或者你只需要添加你需要的

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

没有内置支持隐藏枚举值,您必须手动将其过滤掉:

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

Arrays.asList()返回一个固定大小的列表。您不能对其调用remove()。@DodgyCodeException感谢您的更正,将更新。
availrightslist.addAll(Arrays.asList(UserRight.values())
可以简化为
Collections.addAll(availrightslist,UserRight.values())
List<UserRight> okRights = Arrays.stream(UserRights.values())
    .filter(userRight -> userRight != UserRight.SYSTEMMANAGEMENT)
    .collect(Collectors.toList());
availablerightslist.addall(okRights);