我试图找到使用Java Optional
的最简洁(和有意义)的方法,从Optional<String>
读取第一个值并返回String(如果存在),或返回“NOT_FOUND”。这是我正在使用的代码:
public static String getValue(Optional<String> input) {
return input.ifPresent(val -> val.get()).orElse("NOT_FOUND")
}
Optional的方法显然有非常特殊的用途,但API让我感到困惑。
更新(4/13/2018):
我的问题中的代码不正确,因为如果我将val
视为Optional中的值,则val.get()
没有任何意义。谢谢你指出了这一点,@ freettman。
另外,我在接受的答案的注释中添加了我的问题的另一部分,即我需要一种方法来操作String值,如果存在,则返回之前。如果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è的回答和后续评论都涉及这个问题的两个部分。
答案 0 :(得分:6)
您所要做的就是将您的退货声明更改为:
return input.orElse("NOT_FOUND");
这将返回Optional中的对象,如果存在,则返回“NOT_FOUND”。
那就是说,我会避免使用Optional作为参数。见here。
答案 1 :(得分:1)
如果你需要操纵字符串值,如果它在返回之前存在,请使用map
method:
public static String getValue(Optional<String> input) {
return input.map(s -> s.substring(0,7).toUpperCase()).orElse("NOT_FOUND");
}
如果input
为空,则该方法返回默认值 - "NOT_FOUND"
,否则返回字符串的大写部分。
getValue(Optional.ofNullable(null));
$6 ==> "NOT_FOUND"
getValue(Optional.of("some long string"));
$7 ==> "SOME LO"