我想知道是否有一种方法可以找出使用了哪些枚举。我有一个完整的对象列表,需要检查使用了哪些枚举和未使用哪个枚举。
我试图遍历列表,并取回所有使用枚举的对象,但我不知道如何获取未使用的对象。
答案 0 :(得分:3)
您可以使用EnumSet#allOf
来获取枚举中的所有值,并从中删除使用过的值:
EnumSet<MyEnum> all = EnumSet.allOf(MyEnum.class);
for (MyObject obj : allOfTheObjects) {
all.remove(obj.getEnumMember());
}
// Whatever remains in "all" are the unused enum values
答案 1 :(得分:0)
如果您希望使用更多的功能样式,这也将起作用:
EnumSet<MyEnum> allEnums = EnumSet.allOf(MyEnum.class);
List<MyObject> myObjects = new LinkedList<>();
Set<MyEnum> foundEnums = myObjects.stream()
.map(MyObject::getMyEnum)
.collect(Collectors.toSet());
allEnums.removeAll(foundEnums);
或:
myObjects.forEach(myObject -> allEnums.remove(myObject.getMyEnum()));