如何一次检索所有枚举值? 预期价值观 [“男性”,“女性”] 输出 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;
}
}
答案 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();
}