从Java中有条件地提取值可选
我试图找到使用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è的回答和后续评论解决了这个问题的两个部
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()
甚至不会编译。我试图在可选中获取值,如果存在值,则从方法返回。@WebUserinput
是一个可选的,val
是一个字符串。查看此内容,然后查看类型返回上的java文档。@Aominèpoint,并感谢您提供的额外链接。什么是val
?您是否试图以某种方式使用val.get()
的返回值?实际上,val
是可选的,因此val.get()
甚至不会编译。我试图在可选中获取值,如果存在值,则从方法返回。@WebUserinput
是一个可选的,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"