Возможно ли в Java вернуть имя и значения enum вместе? - PullRequest
3 голосов
/ 03 июля 2019

Возможно ли объединить имя и ярлыки 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"
]

Ответы [ 4 ]

2 голосов
/ 03 июля 2019

У вас есть несколько вариантов, как вы можете достичь этого.Вы можете просто вернуть карту с именем в качестве ключа и меткой в ​​качестве значения:

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 голос
/ 03 июля 2019

Это можно сделать так:

        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;
        }
0 голосов
/ 03 июля 2019

Попробуйте намного проще:

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"}
]
0 голосов
/ 03 июля 2019

Прежде всего измените метод 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...