Преобразование EnumSet в массив целых чисел

У меня есть EnumSet, и я хочу преобразовать его в массив его порядковых значений. Например:

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

и что я хочу получить:

[0, 2]

person Sergеу Isupov    schedule 06.10.2015    source источник


Ответы (2)


Вы не должны использовать необработанный тип EnumSet без части <MyEnum>

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

Решение Java 8:

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

Решение до Java 8:

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

Убедитесь, что это сработало:

System.out.println(Arrays.toString(ordinals));
System.out.println(Arrays.toString(ordinals2));
person Paul Boddington    schedule 06.10.2015
comment
Я думаю, мне нужно использовать решение до Java 8. - person Sergеу Isupov; 06.10.2015

Вы можете сделать это с потоками:

 int[] ordinals = enumSet.stream().mapToInt(Enum::ordinal).toArray();
person wero    schedule 06.10.2015
comment
Спасибо. Это работает, но в Android нет метода stream(). Извините, я забыл добавить тег Android - person Sergеу Isupov; 06.10.2015