java - Java中将枚举值转换为字符串数组的最便捷方法

标签 java arrays

这是关于将枚举值转换为字符串数组。我有一个枚举:

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/

相关文章:

java - Jackson - 使用注释将第一个数组成员绑定(bind)到对象

java - 同一个变量可以有两个名字吗?

java - Docker + Spring Boot + Postgres-org.postgresql.util.PSQLException : The connection attempt failed

Java Mail,发送多个附件不起作用

java - 在 Google Web Toolkit 中使用自定义字体

python - 获取 numpy.ndarray 中每个元素的日志?

php - Array_merge 与 +

javascript - 如何将 Angular ui-grid 与字符串数组一起使用

c++ - 定义结构数组

java - hive 模拟 : A counter of a type of bee returns unusually high numbers