检查列表是否至少包含另一个 - 枚举

2022-09-04 07:55:38

我有一个枚举:

public enum PermissionsEnum {
    ABC("Abc"),        
    XYZ("Xyz"),
    ....
}

然后我有一个枚举列表。我想检查我的列表是否至少有一个枚举。我目前通过迭代方法检查它。我也知道有一种方法可以通过使用 检查 .||list.contains(enum.ABC..) || list.contains(enum.XYZ) || ...

有没有更好的方法来做到这一点?

这个问题显示了如果目标列表是字符串列表,该怎么办,如果列表是另一个枚举列表,我想获得匹配状态。


答案 1

Collections.disjoint如果两个指定的集合没有共同的元素,则返回。如果它返回 ,则您的列表至少有一个枚举。truefalse

boolean contains = !Collections.disjoint(list, EnumSet.allOf(PermissionsEnum.class)));

流 API 方法可以是:

EnumSet<PermissionsEnum> set = EnumSet.allOf(PermissionsEnum.class);
boolean contains = list.stream().anyMatch(set::contains);

(类似于迭代方法,但包括并行化)


答案 2

您可以使用 .Collections.disjoint()

使用要检查的枚举创建另一个列表,然后执行 。如果未找到任何元素,则返回 true。如果为 false,则至少存在一个元素。Collections.disjoint(list, listOfEnumsToCheck)

我想你甚至可以使用Enum.values(),所以它会变成:

// Using ! to show there is at least one value
if (!Collections.disjoint(list, PermissionsEnum.values()) { 
     doStuff 
}