来自Java的条件提取值可选

时间:2018-04-12 23:22:14

标签: java optional

我试图找到使用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è的回答和后续评论都涉及这个问题的两个部分。

2 个答案:

答案 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"