如何在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);