Bas*_*que 5 java enums boolean list enumset
我有一个EnumSet并且想要来回转换为布尔基元数组.如果它工作得更好,我可以使用一个List而不是数组,和/或Boolean对象而不是布尔基元.
enum MyEnum { DOG, CAT, BIRD; }
EnumSet enumSet = EnumSet.of( MyEnum.DOG, MyEnum.CAT );
Run Code Online (Sandbox Code Playgroud)
我想在另一端获得的是一个如下所示的数组:
[TRUE, TRUE, FALSE]
Run Code Online (Sandbox Code Playgroud)
这里的这个问题与此类似,将EnumSet转换为整数数组.区别:
Boolean整数(显然)TRUE每个枚举元素包含在EnumSeta和a中FALSE,每个元素都被排除在外EnumSet.另一个问题的数组仅包括在中找到的项目EnumSet.(更重要的是)要做到这一点,你基本上写
MyEnum[] values = MyEnum.values(); // or MyEnum.class.getEnumConstants()
boolean[] present = new boolean[values.length];
for (int i = 0; i < values.length; i++) {
present[i] = enumSet.contains(values[i]);
}
Run Code Online (Sandbox Code Playgroud)
走向另一个方向,从present上面enumSet_创建的布尔数组到下面创建的.
EnumSet<MyEnum> enumSet_ = EnumSet.noneOf ( MyEnum.class ); // Instantiate an empty EnumSet.
MyEnum[] values_ = MyEnum.values ();
for ( int i = 0 ; i < values_.length ; i ++ ) {
if ( present[ i ] ) { // If the array element is TRUE, add the matching MyEnum item to the EnumSet. If FALSE, do nothing, effectively omitting the matching MyEnum item from the EnumSet.
enumSet_.add ( values_[ i ] );
}
}
Run Code Online (Sandbox Code Playgroud)