仅在存在时打开可选项 [英] Unwrap an Optional only if it is present

查看:135
本文介绍了仅在存在时打开可选项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以目前我有

String uri = website.getUri();
Optional<PageDetail> pageDetail = webClient.getDetailOfUri(uri);
String displayName;
String description;
if (pageDetail.isPresent()) {
    displayName = pageDetail.get().getName();
    description = pageDetail.get().getDescription();
} else {
    displayName = uri;
    description = "";
}

我打电话给 getDetailOfUri(uri)方法,返回可选< PageDetail> ,我想设置字符串 displayName description PageDetail 对象的字段的值(如果存在)。否则,我想将其设置为某些默认值。

I am calling the getDetailOfUri(uri) method, which returns an Optional<PageDetail>, and I would like to set the strings displayName and description to the values of the PageDetail object's fields, if it is present. Otherwise, I would like to set it to some default values.

我的问题是,有没有更好的方法来重写它?我目前的代码似乎有点冗长乏味,我想知道是否有更简洁的方法来做到这一点。

My question is, is there a better way to rewrite this? My current code seems a bit long and tedious, and I would like to know if there is a more concise way of doing this.

推荐答案

<你可以写:

String uri = website.getUri();
Optional<PageDetail> pageDetail = webClient.getDetailOfUri(uri);
String displayName = pageDetail.map(PageDetail::getName).orElse(uri);
String description = pageDetail.map(PageDetail::getDescription).orElse("");

如果 可选 map 将返回相同的未设置可选。否则,它会将其映射到 Optional ,其中包含 getName()的结果。然后我们可以使用 orElse 在未设置可选时返回默认值。

If the Optional is not set, map will return the same unset Optional. Otherwise, it will map it to an Optional containing the result of getName(). Then we can use orElse to return a default value when the Optional is unset.

这篇关于仅在存在时打开可选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆