Java 获取所有枚举常量
如何一次检索枚举的所有值? 预期值:[“男性”、“女性”] GenderEnum.values()的输出:[“男性”、“女性”]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
如果您使用的是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;
}