Java 获取所有枚举常量

Java 获取所有枚举常量,java,enums,Java,Enums,如何一次检索枚举的所有值? 预期值:[“男性”、“女性”] GenderEnum.values()的输出:[“男性”、“女性”] 如果您使用的是Java 8,那么streams API可能是检索所需值的最简单方法: Stream.of(GenderEnum.values()) // create stream of enum constants .map(e -> e.getType()) // for each constant, retrieve

如何一次检索枚举的所有值? 预期值:[“男性”、“女性”] GenderEnum.values()的输出:[“男性”、“女性”]


如果您使用的是Java 8,那么streams 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)

看起来,您想将枚举作为字符串列表吗?这似乎就是您对构造函数调用的期望。然而,如果你想要的话,我会用这样的方式:

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

这就是您想要的,在您的情况下,它还应该与call
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();
    }
SPGenderEnum[]values=SPGenderEnum.values();
//印刷。
for(SPGenderEnum spgItem:值){
System.out.println(spgItem.getType());
}
//存储在字符串数组中
String[]strVals=新字符串[values.length];
for(int i=0;i
好的,如果您需要
类型
字符串仅用于表示目的,您还可以覆盖枚举的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;

}

迭代
.values()
并在每个项上调用
.toString()
,在本例中。。。顺便说一句,您应该将被重写的方法
调用为字符串
getType()
,这更清楚,但我想getType可能会被保留:DCan您的问题清楚吗?伙计们,他是一个新来者。让我们不要通过否决投票来降低积极性。让我们看看他是否能正确地编辑这个问题你说的“检索”是什么意思?进入什么?一个列表,一个数组,一个字符串?基本上我不想迭代枚举。就像我们通过调用.values()检索enum的所有值一样。我想知道是否有任何东西可以检索[“男”,“女”]而不是[“男”,“女”]。这将只是打印出来。它不会返回一些他想要的东西。@ifly6为了让你保持冷静,我编辑了我的文章《如何在字符串数组中存储它》,谢谢你的指点;)
public enum SPGenderEnum {

    Male, Female;

}