循环遍历枚举值的子集

and*_*sra 11 java enums

我有一个包含4个值的枚举,我有一个接受枚举值的方法签名.我希望能够对所有未作为doSomething()参数传递的枚举值做一些事情.

public void doSomething(EnumThing thing){
   EnumThing[] thingValues = EnumThing.values();
   List<EnumThing> valuesNotPassedAsArg = new ArrayList<EnumThing>();
   for(EnumThing th : thingValues){
       valuesNotPassedAsArg.add(th);
   }
   valuesNotPassAsArg.remove(thing);
  //here I would loop through all valuesNotPassAsArg and do something with them
}

public enum EnumThing{
 SOMETHING, SOMETHINGELSE, ANOTHERTHING;
}
Run Code Online (Sandbox Code Playgroud)

有更清洁的方法吗?我觉得好像从thingValues数组中获取项目的循环是多余的.

Mar*_*nik 24

看看EnumSet.特别,

import java.util.EnumSet;
import static java.util.EnumSet.complementOf;

for (EnumThing t : complementOf(EnumSet.of(thing))) {
  ... do the work ...
}
Run Code Online (Sandbox Code Playgroud)