Как вызвать метод на Optional в минимальном сценарии - PullRequest
0 голосов
/ 10 марта 2019

У меня есть Json, который может выглядеть следующим образом:

{
    "workshop_name" : "ABC"
    "user_name" : "DEF"
}

В моем приложении workshop_name не является обязательным, поэтому он может быть в минимальной версии:

{
    "user_name" : "DEF"
}

Теперь ядумал об использовании Java8 Необязательно, чтобы получить workshop_name из JSON.Я использовал библиотеку org.json и JSONObject.Я мог легко проверить опционально, как это:

public static EnrichContext createEnricher(JSONObject json) {
    EnrichContext enrichContext = new EnrichContext();
    enrichContext.setWorkshopName(Optional.ofNullable(json.getString("workshop_name")).orElse("DEFAULT"));
    enrichContext.setUserName(json.getString("user_name"));
}

Я был вынужден переключиться на GSON, где это выглядит немного по-другому.

json.get("workshop_name").getAsString();

Это означает, что у меня есть новый объект в середине после вызова get в JsonObject (из GSON).

Я пытался использовать вложенную опциональную проверку, но она выглядит простослишком сложный.

То, что я понял:

enrichContext.setWorkshopName((Optional.ofNullable(json.get("workshop_name")).orElse(new JsonPrimitive("DEFAULT"))).getAsString());

Мне не нравится идея создания нового JsonPrimitive при каждом чтении.Есть ли более оптимальный способ решения этой проблемы?

1 Ответ

2 голосов
/ 10 марта 2019

Что вы можете сделать, это использовать Optional<String> вместо Optional<JsonPrimitive>

String workshopName = Optional.ofNullable(json.get("workshop_name"))
                              .map(JsonElement::getAsString)
                              .orElse("DEFAULT");
...