获取所有枚举常量

时间:2018-06-11 12:39:35

标签: java enums

如何一次检索所有枚举值? 预期价值观 [“男性”,“女性”] 输出 GenderEnum.values() [“MALE”,“FEMALE”]

    public enum SPGenderEnum {
        MALE("Male"),
        FEMALE("Female");

        private SPGenderEnum(final String type) {
            this.type = type;
        }

        private final String type;

        public String getType() {return type;}

        @Override
        public String toString() {
            return type;
        }
    }

4 个答案:

答案 0 :(得分:4)

如果您使用的是Java 8,则流API可能是检索所需值的最简单方法:

Stream.of(GenderEnum.values())       // create stream of enum constants
      .map(e -> e.getType())         // for each constant, retrieve getType()
      .collect(Collectors.toList())  // collect results into a list

表达式e -> e.getType()被称为 lambda表达式,它是声明一个非常简单的函数的简单方法。 map运算符将该函数应用于流中的每个元素,用函数的返回值替换每个元素。在这种情况下,lambda返回调用e.getType()的结果,其中e被假定为GenderEnum值。

像这样的简单lambda可以用更简洁的形式重写,称为方法引用,就像@ ifly6的回答一样。

您可以将结果收集到String[],而不是将collect(Collectors.toList())替换为toArray(String[]::new)

答案 1 :(得分:3)

看起来,你想把你的枚举作为一个字符串列表?这似乎是你对构造函数调用的期望。但是,如果你想要,我会使用这样的东西:

Arrays.stream(YourEnum.values())  // prefer Arrays#stream to Stream#of due to 
                                  // lazy loading and primitive type handling
    .map(YourEnum::toString)      // prefer method reference to lambda
    .collect(Collectors.toList()) // prefer lists to arrays

答案 2 :(得分:0)

好吧,如果您仅为表示目的而需要type字符串,您也可以覆盖枚举的toString方法以返回值的大写版本。

public enum SPGenderEnum {

    MALE, FEMALE;

   @Override
   public String toString() {
        // call toString of supertype
        String name =  super.toString();
        // capitalize the uppercase enum value
        return name.substring(0,1) + name.substring(1).toLowerCase();
    }
}

或首先以不同方式定义枚举值:

public enum SPGenderEnum {

    Male, Female;

}

答案 3 :(得分:-1)

这就是你想要的,它也适用于你案件中的toString()来电

    SPGenderEnum[]  values = SPGenderEnum.values();

    //to print eg.
    for (SPGenderEnum spgItem : values) {
        System.out.println(spgItem.getType());
    }

    //to store in String array
    String[] strVals = new String[values.length];
    for (int i = 0; i < strVals.length; i++) {
        strVals[i]= values[i].getType();
    }