Convert EnumSet to an array of integers

I have an EnumSet and want to convert it to an array of my ordinal values. For instance:

enum MyEnum { A, B, C; } EnumSet enumSet = EnumSet.of(MyEnum.A, MyEnum.C); 

and what I want to get:

 [0, 2] 
+1
source share
2 answers

You cannot use the raw type EnumSet without the <MyEnum> part

 EnumSet<MyEnum> enumSet = EnumSet.of(MyEnum.A, MyEnum.C); 

Java 8 solution:

 MyEnum[] values = MyEnum.values(); int[] ordinals = IntStream.range(0, values.length).filter(i -> enumSet.contains(values[i])).toArray(); 

Pre-Java solution:

 int[] ordinals2 = new int[enumSet.size()]; int index = 0; for (MyEnum e : enumSet) ordinals2[index++] = e.ordinal(); 

Make sure it works:

 System.out.println(Arrays.toString(ordinals)); System.out.println(Arrays.toString(ordinals2)); 
+4
source

You can do this with threads:

  int[] ordinals = enumSet.stream().mapToInt(Enum::ordinal).toArray(); 
+4
source

All Articles