[英]Is it possible in Java to return enum name and values together?
是否可以将ENUM名称和标签放在一起? 喜欢:
[
{"COMBUSTIVEL", "Combustível"},
{"TROCADEOLEO", "Troca de Óleo"},
{"PNEUDIANTEIRO", "Pneu Dianteiro"},
{"PNEUTRASEIRO", "Pneu Traseiro"},
{"CORRENTE", "Corrente"},
{"RELACAO", "Relação"}
]
我正在使用Spring MVC,但我认为这是无关紧要的。
我试图覆盖toString()
方法,但不幸的是它没有用。
我的代码:
public enum Categoria {
COMBUSTIVEL("Combustível"),
TROCADEOLEO("Troca de óleo"),
PNEUDIANTEIRO("Pneu dianteiro"),
PNEUTRASEIRO("Pneu traseiro"),
CORRENTE("Corrente"),
RELACAO("Relação");
private String label;
Categoria(String item){
this.label = item;
}
public String getLabel(){
return this.label;
}
@Override
public String toString() {
return this.label;
}
public String[][] getList(){
Categoria[] values = Categoria.values();
return ?;
}
}
结果是:
[
"COMBUSTIVEL",
"TROCADEOLEO",
"PNEUDIANTEIRO",
"PNEUTRASEIRO",
"CORRENTE",
"RELACAO"
]
这可以这样做:
public static String[][] getList(){
Categoria[] values = Categoria.values();
String[][] result = new String[values.length][2];
for (int i = 0; i < values.length; ++i) {
String[] pair = {values[i].name(), values[i].toString()};
result[i] = pair;
}
return result;
}
您有多种选择可以实现这一目标。 您只需返回一个名称为key的地图,并将其标记为值:
public static Map<String, String> getList() {
return Arrays.stream(Categoria.values())
.collect(Collectors.toMap(Categoria::name, Categoria::getLabel));
}
如果你想要一个嵌套数组,你可以使用它:
public static String[][] getList() {
return Arrays.stream(Categoria.values())
.map(c -> new String[] {c.name(), c.getLabel()})
.toArray(String[][]::new);
}
另一种选择是将枚举映射到自定义对象或创建自定义序列化程序。
首先将toString方法更改为
@Override
public String toString() {
return name() + ", " + getLabel();
}
然后更改你的getList()
public String[][] getList(){
Categoria[] values = Categoria.values();
List<String> resultList = new ArrayList<>();
for(Categoria value : values) {
resultList.add(value.toString);
}
return resultList.toArray();
}
试试这个更简单:
public enum Categoria {
COMBUSTIVEL("Combustível"), TROCADEOLEO("Troca de óleo"), PNEUDIANTEIRO("Pneu dianteiro"),
PNEUTRASEIRO("Pneu traseiro"), CORRENTE("Corrente"), RELACAO("Relação");
private String label;
Categoria(String item) {
this.label = item;
}
public String getLabel() {
return this.label;
}
public void setLabel(String label) {
this.label = label;
}
public static String myText() {
StringBuffer str = new StringBuffer("");
int i = 0;
Categoria[] categoria = Categoria.values();
str.append("[\n");
for(Categoria c : categoria) {
str.append("\t{\""+c.getLabel()+"\", \""+categoria[i].name()+"\"}");
if((i + 1) < categoria.length) {
str.append(",\n");
}
i++;
}
str.append("\n]");
return str.toString();
}
}
public class Test {
public static void main(String[] args) {
System.out.println(Categoria.myText());
}
}
输出:
[
{"Combustível", "COMBUSTIVEL"},
{"Troca de óleo", "TROCADEOLEO"},
{"Pneu dianteiro", "PNEUDIANTEIRO"},
{"Pneu traseiro", "PNEUTRASEIRO"},
{"Corrente", "CORRENTE"},
{"Relação", "RELACAO"}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.