Kon*_*tin 91 java arrays enums
将枚举元素的名称作为String
s 数组的最简单和/或最短的方法是什么?
我的意思是,例如,如果我有以下枚举:
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
public static String[] names() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
该names()
方法将返回一个类似的数组{ "NEW", "RUNNABLE", "BLOCKED", "WAITING", "TIMED_WAITING", "TERMINATED" }
.
Boh*_*ian 84
在java 8中,它是使用流的任意枚举类的一行:
public static String[] getNames(Class<? extends Enum<?>> e) {
return Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new);
}
Run Code Online (Sandbox Code Playgroud)
在java 7中,有点不那么优雅,但是这个单线程可以解决问题:
public static String[] getNames(Class<? extends Enum<?>> e) {
return Arrays.toString(e.getEnumConstants()).replaceAll("^.|.$", "").split(", ");
}
Run Code Online (Sandbox Code Playgroud)
此外,这是一个适用于任何枚举的版本:
String[] names = getNames(State.class); // any other enum class will work
Run Code Online (Sandbox Code Playgroud)
你会这样称呼:
public static String[] names() {
return Arrays.toString(State.values()).replaceAll("^.|.$", "").split(", ");
}
Run Code Online (Sandbox Code Playgroud)
Per*_*ror 62
String[]
为名称创建一个数组并调用values()
返回所有枚举值的静态方法,然后遍历这些值并填充names数组.
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;
}
Run Code Online (Sandbox Code Playgroud)
Ser*_*llo 12
这是使用Apache commons-lang3的优雅解决方案:
EnumUtils.getEnumList(State.class)
Run Code Online (Sandbox Code Playgroud)
虽然它返回一个List,但您可以使用list.toArray()轻松转换列表
Kri*_*oyd 10
如果你可以使用Java 8,这很好用(替代Yura的建议,效率更高):
public static String[] names() {
return Stream.of(State.values()).map(State::name).toArray(String[]::new);
}
Run Code Online (Sandbox Code Playgroud)
小智 9
用java 8:
Arrays.stream(MyEnum.values()).map(Enum::name)
.collect(Collectors.toList()).toArray();
Run Code Online (Sandbox Code Playgroud)
我会这样写的
public static String[] names() {
java.util.LinkedList<String> list = new LinkedList<String>();
for (State s : State.values()) {
list.add(s.name());
}
return list.toArray(new String[list.size()]);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
116590 次 |
最近记录: |