如何在Java中隐藏枚举值?

时间:2019-05-09 14:19:06

标签: java enums

我有一个具有权利的Enum类。

public enum UserRight {
    SYSTEMMANAGEMENT, USERADMINISTRATION, ROLEADMINISTRATION, 
    STRUCTUREADMINISTRATION, DOCUMENTADMINISTRATION;
}

现在,我想将我所有的权限加载到列表中,除了SYSTEMMANAGEMENT。 我现在是这样的:

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

在没有SYSTEMMANAGEMENT权限的情况下如何加载所有权限?

4 个答案:

答案 0 :(得分:13)

您可以在添加所有内容后将其删除:

availrightslist.remove(UserRight.SYSTEMMANAGEMENT);

或使用一些EnumSet 魔术

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

通常,如果您的Collection中有enum个,则建议使用EnumSet。因为两次UserRight根本没有意义。

答案 1 :(得分:2)

您可以简单地删除不需要的权利。

Collections.addAll(availrightslist, UserRight.values())
availrightslist.remove(UserRight.SYSTEMMANAGEMENT);

或者您只需添加所需的内容。

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:-1)

您可以尝试一下,我不确定这是否是最佳解决方案。

Arrays.asList(UserRight.values())
      .stream()
      .filter(value-> value != UserRight.SYSTEMMANAGEMENT)
      .collect(Collectors.toList())