在EnumSet和布尔值数组之间转换

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.(更重要的是)

Lou*_*man 6

要做到这一点,你基本上写

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)