我目前有以下代码:
String response = HttpClient.get(url);
Trip trip = new Gson().fromJson(response, Trip.class);
我已经转换了上面的代码,以便HttpClient.get()返回一个String的可选项,作为responsebody。 我想知道我是否可以使上面的代码成为单行代码,以便我可以拥有类似的东西:
HttpClient.get(url).map(r -> new Gson().fromJson(r, Trip.Class))
这有意义吗? 如何使上面的代码功能?
答案 0 :(得分:1)
如果您已经提到过,重构后的HttpClient.get(url)
现在返回Optional<String>
而不是String
,那么您希望在String
上执行映射功能}将Optional包含在Trip
实例中。
您实际上已经关闭了,您的问题是,您在<{1}}映射后返回的Optional<Trip>
中所包含的值不展开当下。根据您认为哪种方法最适合手头的任务,有几种方法可以展开map(r -> new Gson().fromJson(r, Trip.Class))
。
以下几个例子:
使用Optional<T>
解包:
orElse
使用Trip trip = HttpClient.get(url)
.map(r -> new Gson().fromJson(r, Trip.Class))
.orElse(null); // or provide a default value if you have it in place
:
ifPresent
对于用于展开HttpClient.get(url)
.map(r -> new Gson().fromJson(r, Trip.Class))
.ifPresent(e -> /* do something with the element*/);
类型的所有其他方法,可以找到here。