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。我不理解“不工作”是什么意思。有编译错误吗?运行时出现错误消息?还有别的吗?也许在该行附近添加更多的代码会有所帮助。您可以显示更多的代码吗?-很难猜到你想在这里实现什么…这是拼图的最后一块。非常感谢你的明确回答。