首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将枚举中的所有名称作为String[]获取

将枚举中的所有名称作为String[]获取
EN

Stack Overflow用户
提问于 2012-12-09 08:06:02
回答 23查看 155.9K关注 0票数 109

将枚举元素的名称作为String数组获取的最简单和/或最快捷的方法是什么?

我的意思是,例如,如果我有以下枚举:

代码语言:javascript
复制
public enum State {
    NEW,
    RUNNABLE,
    BLOCKED,
    WAITING,
    TIMED_WAITING,
    TERMINATED;

    public static String[] names() {
        // ...
    }
}

names()方法将返回数组{ "NEW", "RUNNABLE", "BLOCKED", "WAITING", "TIMED_WAITING", "TERMINATED" }

EN

回答 23

Stack Overflow用户

回答已采纳

发布于 2012-12-09 09:18:46

下面是任何enum类的一行代码:

代码语言:javascript
复制
public static String[] getNames(Class<? extends Enum<?>> e) {
    return Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new);
}

Java 8之前的版本仍然是一行程序,尽管不那么优雅:

代码语言:javascript
复制
public static String[] getNames(Class<? extends Enum<?>> e) {
    return Arrays.toString(e.getEnumConstants()).replaceAll("^.|.$", "").split(", ");
}

你可以这样调用:

代码语言:javascript
复制
String[] names = getNames(State.class); // any other enum class will work

如果您只是想为硬编码的枚举类提供一些简单的东西:

代码语言:javascript
复制
public static String[] names() {
    return Arrays.toString(State.values()).replaceAll("^.|.$", "").split(", ");
}
票数 112
EN

Stack Overflow用户

发布于 2012-12-09 08:09:23

为名称创建一个String[]数组,并调用返回所有枚举值的静态values()方法,然后遍历这些值并填充名称数组。

代码语言:javascript
复制
public static String[] names() {
    State[] states = values();
    String[] names = new String[states.length];

    for (int i = 0; i < states.length; i++) {
        names[i] = states[i].name();
    }

    return names;
}
票数 64
EN

Stack Overflow用户

发布于 2015-06-02 13:16:45

如果你可以使用Java 8,这会很好地工作(替代Yura的建议,更有效):

代码语言:javascript
复制
public static String[] names() {
    return Stream.of(State.values()).map(State::name).toArray(String[]::new);
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13783295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档