仅在存在时打开可选项 [英] Unwrap an Optional only if it is present
问题描述
所以目前我有
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屋!