将EnumSet转换为整数数组

时间:2015-10-06 18:19:10

标签: java android arrays enums enumset

我有一个EnumSet并希望将其转换为其序数值的数组。 例如:

import re
arr = ['testing', 'ERROR: Error Number 32, Error Location 0x420, found exception', 'test']
regex = re.compile('ERROR:\sError\sNumber\s(\d+),\sError\sLocation\s0x(\d+),\sfound\sexception')
for string in arr:
    if re.match(regex, string):
        print(string)

以及我想得到的:

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

2 个答案:

答案 0 :(得分:5)

您可以使用流来执行此操作:

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

答案 1 :(得分:4)

如果没有<MyEnum>部分

,则不应使用原始类型EnumSet
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));