【发布时间】:2018-05-03 19:35:14
【问题描述】:
我试图找到使用 Java Optional 的最简洁(和有意义)的方法,从 Optional<String> 中读取第一个值并返回字符串(如果存在),或者返回“NOT_FOUND”。这是我正在使用的代码:
public static String getValue(Optional<String> input) {
return input.ifPresent(val -> val.get()).orElse("NOT_FOUND")
}
Optional 的方法显然有非常特定的用途,但 API 让我感到困惑。
更新(2018 年 4 月 13 日):
我的问题中的代码不正确,因为如果我将val 视为Optional 中的值,那么val.get() 没有任何意义。感谢您指出这一点,@rgettman。
此外,我在已接受答案的 cmets 中为我的问题添加了另一部分,即我需要一种方法来在返回之前操纵字符串值(如果存在)。如果 Optional 不包含值,orElse("NOT_FOUND") 仍然适用。那么什么是可接受的使用Optional API 来实现以下目标?
public static String getValue(Optional<String> input) {
return input.isPresent() ? input.get().substring(0,7).toUpperCase() : "NOT_FOUND";
}
@Aominè 的回答和后续 cmets 解决了这个问题的两个部分。
【问题讨论】:
-
什么是
val?您是否尝试以某种方式使用val.get()的返回值? -
其实
val是Optional中的值,所以val.get()甚至不会编译。我正在尝试获取 Optional 中的值并在存在值时从方法中返回它。 -
@WebUser
input是Optional<String>,val是String。看到这个Guide To Java 8 Optional,然后看到ifPresent返回类型的java文档。 -
@Aominè 指出,感谢您提供的额外链接。