How to convert Optional<Object> to Optional<String> [closed]

北城以北 提交于 2020-08-18 19:28:07

问题


I have this code in Java 11

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

I want to write this code using Optional, the best I could come up with is. I haven't tried running it but I suspect it will work

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

Any ideas how I can accomplish this besides running map on the optional. I was hoping for something like the code below but this doesn't work

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

回答1:


Creating an Optional out of the return value of a method seems a bit awkward. Rather let your getObjectOrNullIfNotAvailable() method return an Optional in the first place. Then use the map operator to convert it in to a string. Here's how it looks.

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

For some reason if you can't change the return value of the method to an Optional, just leave the imperative solution using the ternary operator. Nothing wrong with that.

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



回答2:


Use:

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

Otherwise, you can check if an Object is null and return in that case a String with "null" inside with String.valueOf(Object obj) or Objects.toString(Object obj). Eg.

  String value = Objects.toString(getObjectOrNullIfNotAvailable())



回答3:


You can use map followed by orElse no need to separate them like so :

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


来源:https://stackoverflow.com/questions/57730799/how-to-convert-optionalobject-to-optionalstring

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!