在返回值时,是否有人听说过支持java8 Optionals的json库? 假设我有以下json文档:
{
"person" : {
"address" : {
"streetName" : "Moonshtrasse",
"streetNo" : 12
}
}
}
和一个空文件
{}
假设JSONObject中的get方法返回Optionals,我想做类似的事情:
Optional<String> streetName = obj.getJSONObject("person")
.flatMap(person -> person.getJSONObject("address"))
.flatMap(adr -> adr.getString("streetName"));
而不是在每个get方法之后检查空值。
在第一种情况下,这个构造会给我一个包含街道名称的可选项,在第二种情况下会给我一个空的可选项。
答案 0 :(得分:2)
根据Optional :: map的文档,
If the mapping function returns a null result then this method returns an empty Optional.
因此,我们可以在通过Optional :: map传递的lambdas中调用返回null的方法,而不是flatMapping所述返回null的方法的可选结果,
JSONObject obj = new JSONObject(someJsonString);
Optional<String> streetName = Optional.ofNullable(obj.optJSONObject("person"))
.map(person -> person.optJSONObject("address"))
.map(address -> address.optString("streetName"))
;
答案 1 :(得分:1)
关于来自@zeroflagL的评论,如果我们的方法在所需元素不存在时返回空值,则他的方法将适用。
一个这样的图书馆是org.json
有些方法在没有值时会返回null
。所以我们可以使用Optional作为:
JSONObject obj = new JSONObject(someJsonString);
Optional<String> streetName = Optional.ofNullable(obj.optJSONObject("person"))
.flatMap(person -> Optional.ofNullable(person.optJSONObject("address")))
.flatMap(address -> Optional.ofNullable(address.optString("streetName")));
这会给我们所需的结果。