将EnumSet转换为整数数组 [英] Convert an EnumSet to an array of integers

查看:201
本文介绍了将EnumSet转换为整数数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

我想要得到的:

  [0,2] 


解决方案

您不应该使用不含< 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; (MyEnum e:enumSet)

ordinals2 [index ++] = e.ordinal();

检查它是否有效:

 的System.out.println(Arrays.toString(序号)); 
System.out.println(Arrays.toString(ordinals2));


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

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

and what I want to get:

[0, 2]

解决方案

You should not use the raw type EnumSet without the <MyEnum> part

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

A Java 8 solution:

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

A pre-Java 8 solution:

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

Check that it worked:

System.out.println(Arrays.toString(ordinals));
System.out.println(Arrays.toString(ordinals2));

这篇关于将EnumSet转换为整数数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆