Как вернуть объекты Enum со всеми свойствами из значений Enum в Java - PullRequest
0 голосов
/ 03 октября 2018

У меня есть сценарий для возврата списка состояний в виде json, которые доступны в Status Enum, My Enum выглядит ниже

Пример: -

public enum Status {

CREATED("100", "CREATED"), UPDATED("200", "UPDATED"), DELETED("300", "DELETED");

private final String id;
private final String name;

private Status(String id, String name) {
    this.id = id;
    this.name = name;
}

public String getId() {
    return id;
}

public String getName() {
    return name;
}

@Override
public String toString() {
    return name;
}

public List<Map<String, String>> lookup() {
    List<Map<String, String>> list = new ArrayList<>();
    for (Status s : values()) {
        Map<String, String> map = new HashMap<>();
        map.put("ID", s.getId());
        map.put("name", s.getName());
        list.add(map);
    }
    return list;

}
}

нужен вывод, подобный этому:

[{id: "100", name: "CREATED"}, {id: "200", name: "UPDATED"} ...] Я написал метод поиска с помощью List Of Maps для построенияОтвет: Есть ли лучший способ или утилита для преобразования Enum в Object со всеми свойствами, доступными в Enum.

Есть ли лучший способ сделать это?

Ответы [ 4 ]

0 голосов
/ 03 октября 2018

Вы можете использовать Stream API в Java 8. И использовать параллельно с хорошей производительностью.

List<Map<String, String>> list = Stream.of(Status.values()).parallel().map(temp -> {
        Map<String, String> obj = new HashMap<String, String>();
        obj.put("id", temp.getId());
        obj.put("name", temp.getName());
        return obj;
    }).collect(Collectors.toList());
0 голосов
/ 03 октября 2018

Вы можете использовать библиотеку для сериализации JSON, такую ​​как Gson или Джексон , и реализовать в ней пользовательскую сериализацию.

Пример Пользовательский сериализатор Gson :

class StatusSerializer implements JsonSerializer<Status> {
    public JsonElement serialize(Status status, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject object = new JsonObject();
        object.addProperty("ID", status.getId());
        object.addProperty("name", status.getName());
        return object;
    }
}

Затем вы используете его следующим образом:

Gson gson = new GsonBuilder()
        .registerTypeAdapter(Status.class, new StatusSerializer())
        .create();
String json = gson.toJson(Status.CREATED);

, что дает:

{"ID":"100","name":"CREATED"}
0 голосов
/ 03 октября 2018

Вы можете использовать Джексона для преобразования в JSON.Просто включите @JsonFormat (shape = Shape.OBJECT) в объявление Enum.Это должно дать вам результат.

0 голосов
/ 03 октября 2018
Arrays.stream( Status.class.getEnumConstants() )
   .map( e -> Map.of( "id", e.getId(), "name", e.getName() )
   .collect( Collectors.toList() );

Я на мобильном и не могу проверить, но у вас есть общее представление

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...