Java 使用Gson映射可选的
我目前拥有以下代码:Java 使用Gson映射可选的,java,java-8,gson,optional,Java,Java 8,Gson,Optional,我目前拥有以下代码: String response = HttpClient.get(url); Trip trip = new Gson().fromJson(response, Trip.class); 我已经转换了上面的代码,因此HttpClient.get()返回一个可选的字符串,作为响应库。 我想知道我是否可以将上面的代码做成一行代码,这样我就可以得到如下内容: HttpClient.get(url).map(r -> new Gson().fromJson(r, Trip.
String response = HttpClient.get(url);
Trip trip = new Gson().fromJson(response, Trip.class);
我已经转换了上面的代码,因此HttpClient.get()返回一个可选的字符串,作为响应库。
我想知道我是否可以将上面的代码做成一行代码,这样我就可以得到如下内容:
HttpClient.get(url).map(r -> new Gson().fromJson(r, Trip.Class))
这有意义吗?
如何实现上述代码功能?如果如您所述,重构后的
HttpClient.get(url)
现在返回一个Optional
,而不是String
,然后您希望对包含在Optional中的字符串执行映射功能,将其映射到Trip
实例中
实际上,您已经接近了,您的问题是,在映射map(r->new Gson().fromJson(r,Trip.Class))
之后返回的Optional
中包含的值没有展开。有几种方法可以展开可选的,具体取决于您认为最适合手头任务的方法
下面有几个例子:
使用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*/);
对于用于展开可选类型的所有其他方法,可以找到。看起来不错,您的问题/问题是什么?哪些代码不起作用?HttpClient.get(url).map(r->new Gson().fromJson(r,Trip.Class))不起作用。map函数无法执行映射并返回JsonObject。我不理解“不工作”是什么意思。有编译错误吗?运行时出现错误消息?还有别的吗?也许在该行附近添加更多的代码会有所帮助。您可以显示更多的代码吗?-很难猜到你想在这里实现什么…这是拼图的最后一块。非常感谢你的明确回答。