Sac*_*lla 10 java enums java-8
我有一个枚举:
public enum PermissionsEnum {
ABC("Abc"),
XYZ("Xyz"),
....
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个Enums列表.我想检查一下我的列表中是否至少有一个枚举.我目前通过迭代方法检查它.我也知道有一种方法可以通过||
检查来实现list.contains(enum.ABC..) || list.contains(enum.XYZ) || ...
.
有没有更好的方法呢?
And*_*lko 12
Collections.disjoint
true
如果两个指定的集合没有共同的元素,则返回 如果它返回false
,那么您的列表至少有一个枚举.
boolean contains = !Collections.disjoint(list, EnumSet.allOf(PermissionsEnum.class)));
Run Code Online (Sandbox Code Playgroud)
Stream API方法可以是:
EnumSet<PermissionsEnum> set = EnumSet.allOf(PermissionsEnum.class);
boolean contains = list.stream().anyMatch(set::contains);
Run Code Online (Sandbox Code Playgroud)
(类似于迭代方法,但包含并行化)
你可以用Collections.disjoint()
.使用要检查的枚举创建另一个列表,然后执行Collections.disjoint(list, listOfEnumsToCheck)
- 如果未找到任何元素,则返回true.如果为假,则至少存在一个元素.
我猜你甚至可以使用Enum.values(),所以它会变成:
// Using ! to show there is at least one value
if (!Collections.disjoint(list, PermissionsEnum.values()) {
doStuff
}
Run Code Online (Sandbox Code Playgroud)