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

abh*_*tia 3 java optional java-8 java-11

我在Java 11中有此代码

Object a = getObjectOrNullIfNotAvailable();
String value = a==null ? null : a.toString();
Run Code Online (Sandbox Code Playgroud)

我想使用Optional编写此代码,我能想到的最好的方法是。我没有尝试运行它,但我怀疑它会起作用

Optional<Object> oa = Optional.ofNullable(getObjectOrNullIfNotAvailable());
Optional<String> oas = oa.map(a -> a.toString());
String value = oas.orElse(null);
Run Code Online (Sandbox Code Playgroud)

除了在可选组件上运行map之外,我还有什么想法可以实现此目的。我希望有类似下面的代码,但这行不通

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

Rav*_*ala 10

从方法的返回值中创建Optional似乎有些尴尬。而是让您的getObjectOrNullIfNotAvailable()方法首先返回Optional。然后使用map运算符将其转换为字符串。这是它的外观。

Optional<Object> oa = someOptionalReturningMethod();
String value = oa.map(Object::toString).orElse(null);
Run Code Online (Sandbox Code Playgroud)

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

String value = a==null ? null : a.toString();
Run Code Online (Sandbox Code Playgroud)


Ari*_*era 5

用:

String value = Optional.ofNullable(getObjectOrNullIfNotAvailable()).map(Object::toString).orElse(null);
Run Code Online (Sandbox Code Playgroud)

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

  String value = Objects.toString(getObjectOrNullIfNotAvailable())
Run Code Online (Sandbox Code Playgroud)

  • 如果该方法返回“null”,则会失败。使用 `Optional.ofNullable(…)` 代替 (2认同)