如何将Optional <Object>转换为Optional <String>

时间:2019-08-30 17:12:00

标签: java java-8 optional java-11

我在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);

3 个答案:

答案 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);