繁体   English   中英

Java中是否可以将枚举名称和值一起返回?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM