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

130

获得枚举元素名称的最简单且/或最短的方法是什么,使其作为String数组返回?

这意味着,例如,如果我有以下枚举:

public enum State {
    NEW,
    RUNNABLE,
    BLOCKED,
    WAITING,
    TIMED_WAITING,
    TERMINATED;

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

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


2
为什么没有一个本地的Enum方法可以完全做到这一点,我不明白...还有一个get(index)来简化对value()的获取。 - marcolopes
26个回答

0

只是一个想法:也许你不需要创建一个方法来返回枚举值的字符串数组。

你为什么需要字符串数组?也许你只需要在使用这些值时进行转换,如果你真的需要这样做。

例如:

for (State value:values()) {
    System.out.println(value); // Just print it.
}

for (State value:values()) {
    String x = value.toString(); // Just iterate and do something with x.
}

// If you just need to print the values:
System.out.println(Arrays.toString(State.values()));

0

试试这个:

public static String[] vratAtributy() {
    String[] atributy = new String[values().length];
    for(int index = 0; index < atributy.length; index++) {
        atributy[index] = values()[index].toString();
    }
    return atributy;
}

0
enum CardType {
    CLUB, DIAMOND, HEART, SPADE;

}

public class Control {
    public static void main(String[] args) {

        String[] cardsArray = new String[CardType.values().length];
        int i = 0;

        for (CardType cardType : CardType.values()){
            cardsArray[i] = cardType.name();
            i++;
        }
        //to output the array
        for (int j = 0; j < CardType.values().length; j++){
            System.out.println(cardsArray[j]);
        }
    }
}

创建一个新的字符串数组。您可以使用增强的for循环通过枚举来填充它的值()。 - EngNjuguna

0

最简单的方法:

Category[] category = Category.values();
for (int i = 0; i < cat.length; i++) {
     System.out.println(i  + " - " + category[i]);
}

类别是 枚举 名称


0

您可以将枚举值放入字符串列表中并转换为数组:

    List<String> stateList = new ArrayList<>();

            for (State state: State.values()) {
                stateList.add(state.toString());
            }

    String[] stateArray = new String[stateList.size()];
    stateArray = stateList.toArray(stateArray);

0

你不需要使用Streams APIApache Commons库。这里可能是最简单和最快的方法:

public static String[] names() {
    String[] names = new String[State.values().length];
    State[] values = State.values();
    for (int i = 0, valuesLength = values.length; i < valuesLength; i++) {
        names[i] = values[i].toString();
    }
    return names;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接