在最小情况下如何在Optional上调用方法

时间:2019-03-10 20:27:40

标签: java java-8 gson optional

我有Json,看起来像这样:

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

在我的应用中workshop_name不是强制性的,因此可以采用最低版本:

{
    "user_name" : "DEF"
}

现在我正在考虑使用Java8 Optional从JSON获取workshop_name。我正在使用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();

这意味着在对JsonObject(来自GSON)调用get之后,中间有一个新对象。

我尝试使用嵌套的Optional检查,但是看起来太复杂了。

我发现的是:

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

我不喜欢在每次读取时创建新的JsonPrimitive的想法。有没有解决该问题的最佳方法?

1 个答案:

答案 0 :(得分:2)

您可以使用Optional<String>代替Optional<JsonPrimitive>

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