我在Java 11中有这段代码
Object a = getObjectOrNullIfNotAvailable();
String value = a==null ? null : a.toString();
我想使用Optional编写此代码,我能想到的最好的方法是。我没有尝试运行它,但我怀疑它可以工作
Optional<Object> oa = Optional.ofNullable(getObjectOrNullIfNotAvailable());
Optional<String> oas = oa.map(a -> a.toString());
String value = oas.orElse(null);
除了在可选组件上运行map之外,其他任何想法都可以实现。我希望能得到下面的代码,但这是行不通的
Optional<Object> oa = Optional.ofNullable(getObjectOrNullIfNotAvailable());
String value = oa.ifPresentOrElse(a -> a.toString(), a -> null);
答案 0 :(得分:10)
根据方法的返回值创建Optional似乎有些尴尬。而是让您的getObjectOrNullIfNotAvailable()
方法首先返回Optional。然后,使用map
运算符将其转换为字符串。看起来就是这样。
Optional<Object> oa = someOptionalReturningMethod();
String value = oa.map(Object::toString).orElse(null);
由于某种原因,如果您不能将方法的返回值更改为Optional
,只需使用三元运算符保留命令式解决方案。没关系。
String value = a==null ? null : a.toString();
答案 1 :(得分:4)
使用:
String value = Optional.ofNullable(getObjectOrNullIfNotAvailable()).map(Object::toString).orElse(null);
否则,您可以检查Object是否为null,并在这种情况下返回String.valueOf(Object obj)或Objects.toString(Object obj)内部为“ null”的字符串。例如
String value = Objects.toString(getObjectOrNullIfNotAvailable())
答案 2 :(得分:3)
您可以使用map
,然后使用orElse
,而无需像这样将它们分开:
String value = Optional.ofNullable(a)
.map(Object::toString)
.orElse(null);