是否可以将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"
]
答案 0 :(得分:2)
您有多种实现方式。您可以简单地返回名称为键,标签为值的地图:
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);
}
另一种选择是将枚举映射到自定义对象或创建自定义序列化器。
答案 1 :(得分:1)
可以这样做:
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;
}
答案 2 :(得分:0)
首先将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();
}
答案 3 :(得分:0)
尝试简单得多:
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"}
]