这是关于将枚举值转换为字符串数组。我有一个枚举:
enum Weather {
RAINY, SUNNY, STORMY
}
我想用最少的努力将其转换为字符串数组,并且在 Java 8+ 中没有循环。这是我想出的最好的:
Arrays.stream(Weather.values()).map(Enum::toString).toArray(String[]::new)
还有其他类似或更方便的方法来做同样的事情吗?
最佳答案
原帖
是的,这是一个很好的 Java 8 方式,但是......
toString
可以被覆盖,所以你最好使用 Weather::name
它返回枚举常量的名称(与枚举声明中声明的完全相同) )且无法更改:
Stream.of(Weather.values()).map(Weather::name).toArray(String[]::new);
<小时/>
一些泛型
我编写了一个辅助类来以通用方式处理任何枚举:
class EnumUtils {
public static <T extends Enum<T>> String[] getStringValues(Class<T> enumClass) {
return getStringValuesWithStringExtractor(enumClass, Enum::name);
}
public static <T extends Enum<T>> String[] getStringValuesWithStringExtractor(
Class<T> enumClass,
Function<? super T, String> extractor
) {
return of(enumClass.getEnumConstants()).map(extractor).toArray(String[]::new);
}
}
这是一个演示:
enum Weather {
RAINY, SUNNY, STORMY;
@Override
public String toString() {
return String.valueOf(hashCode());
}
public static void main(String[] args) {
System.out.println(Arrays.toString(EnumUtils.getStringValues(Weather.class)));
System.out.println(Arrays.toString(EnumUtils.getStringValuesWithStringExtractor(Weather.class, Weather::toString)));
}
}
输出:
[RAINY, SUNNY, STORMY]
[359023572, 305808283, 2111991224]
关于java - Java中将枚举值转换为字符串数组的最便捷方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45507197/