从Java中有条件地提取值可选

从Java中有条件地提取值可选,java,optional,Java,Optional,我试图找到使用JavaOptional的最简洁(和有意义)的方法,从Optional中读取第一个值并返回字符串(如果存在),或者返回“NOT_FOUND”。以下是我正在使用的代码: public static String getValue(Optional<String> input) { return input.ifPresent(val -> val.get()).orElse("NOT_FOUND") } @Aominè的回答和后续评论解决了这个问题的两个部

我试图找到使用Java
Optional
的最简洁(和有意义)的方法,从
Optional
中读取第一个值并返回字符串(如果存在),或者返回“NOT_FOUND”。以下是我正在使用的代码:

public static String getValue(Optional<String> input) {
    return input.ifPresent(val -> val.get()).orElse("NOT_FOUND")
}

@Aominè的回答和后续评论解决了这个问题的两个部分。

您所要做的就是将您的返回声明更改为:

return input.orElse("NOT_FOUND");
这将返回可选的if present中的对象,否则返回“NOT_FOUND”


也就是说,我会避免使用可选的作为参数。请参阅。

您所要做的就是将返回语句更改为:

return input.orElse("NOT_FOUND");
这将返回可选的if present中的对象,否则返回“NOT_FOUND”


也就是说,我会避免使用可选的作为参数。请参阅。

如果需要操作字符串值,如果在返回之前字符串值存在,请使用
map


如果需要操作字符串值,如果在返回之前字符串值存在,请使用
map


什么是
val
?您是否试图以某种方式使用
val.get()
的返回值?实际上,
val
是可选的,因此
val.get()
甚至不会编译。我试图在可选中获取值,如果存在值,则从方法返回。@WebUser
input
是一个
可选的
val
是一个
字符串
。查看此内容,然后查看类型返回上的java文档。@Aominèpoint,并感谢您提供的额外链接。什么是
val
?您是否试图以某种方式使用
val.get()
的返回值?实际上,
val
是可选的,因此
val.get()
甚至不会编译。我试图在可选中获取值,如果存在值,则从方法返回。@WebUser
input
是一个
可选的
val
是一个
字符串
。看看这个,然后看看类型返回上的java文档。@Aominèpoint,并感谢您提供的额外链接。它的可读性真是太棒了!但是,如果我想在返回之前操作
input
中的值,该怎么办?与
返回input.isPresent()等价的函数?input.get().substring(0,7.toUpperCase():“未找到”我尝试了
返回input.map(val->val.substring(0,7).toUpperCase()).orElse(“未找到”)和它似乎工作。这是对API的适当使用,以实现我所追求的结果,还是我可以做得更好?@WebUser后者更好,因为它更可读(IMO),是的,这是对API的适当使用,以实现您所追求的结果。感谢确认!这是多么令人惊讶的可读性!但是,如果我想在返回之前操作
input
中的值,该怎么办?与
返回input.isPresent()等价的函数?input.get().substring(0,7.toUpperCase():“未找到”我尝试了
返回input.map(val->val.substring(0,7).toUpperCase()).orElse(“未找到”)和它似乎工作。这是对API的适当使用,以实现我所追求的结果,还是我可以做得更好?@WebUser后者更好,因为它更可读(IMO),是的,这是对API的适当使用,以实现您所追求的结果。感谢确认!
public static String getValue(Optional<String> input) {
    return input.map(s -> s.substring(0,7).toUpperCase()).orElse("NOT_FOUND");
} 
getValue(Optional.ofNullable(null));
$6 ==> "NOT_FOUND"

getValue(Optional.of("some long string"));
$7 ==> "SOME LO"