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

How to convert Optional<Object> to Optional<String>

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

除了 运行 可选映射之外,我还有什么办法可以完成此操作。我希望得到类似下面代码的东西,但这不起作用

Optional<Object> oa = Optional.ofNullable(getObjectOrNullIfNotAvailable());
String value = oa.ifPresentOrElse(a -> a.toString(), a -> null);

从方法的 return 值创建一个 Optional 似乎有点尴尬。而是首先让您的 getObjectOrNullIfNotAvailable() 方法 return 成为一个 Optional。然后使用 map 运算符将其转换为字符串。这是它的样子。

Optional<Object> oa = someOptionalReturningMethod();
String value = oa.map(Object::toString).orElse(null);

出于某种原因,如果您无法将方法的 return 值更改为 Optional,只需保留使用三元运算符的命令式解决方案即可。没有错。

String value = a==null ? null : a.toString();

您可以使用 map,然后使用 orElse,无需像这样将它们分开:

String value = Optional.ofNullable(a)
        .map(Object::toString)
        .orElse(null);

使用:

String value = Optional.ofNullable(getObjectOrNullIfNotAvailable()).map(Object::toString).orElse(null);

否则,您可以检查一个对象是否为空,在这种情况下 return 是一个带有 "null" 的字符串,其中包含 String.valueOf(Object obj) 或 Objects.toString(对象对象)。例如

  String value = Objects.toString(getObjectOrNullIfNotAvailable())