Java 8可选的空检查

Dav*_*vid 4 java optional java-8

我试图检查输入是否为null然后输出应该为null或者如果输入是String,那么它应该将其转换为Long

假设输入永远不是"abcd",则输入为空或"12","14"等.

以下代码片段抛出空指针异常,因为我无法正确使用Java 8 Optional.我可以捕获空指针异常或使用if/else with tertiary'?' 运算符但是有没有办法用Optional来处理这个场景?

public class OptionalClass {

public void methodA(String input) {
    System.out.println(Long.valueOf(Optional.ofNullable(input).orElse(null)));
}

public static void main(String[] args) {
    new OptionalClass().methodA("12");// This works fine
    new OptionalClass().methodA(null); // This throws null pointer exception
}   }
Run Code Online (Sandbox Code Playgroud)

Mis*_*sha 9

使用map从转换Optional<String>Optional<Long>:

Optional<String> str = ...;
Optional<Long> num = str.map(Long::valueOf);
Run Code Online (Sandbox Code Playgroud)

如果str是空的,num也是空的.如果str有一个值,则num包含结果valueOf.如果Optional<String>来自其他地方,这将主要是有用的.制作一个只是为了避免使用三元运算符是值得怀疑的,但是这里是你可以重写方法的方法:

public void methodA(String input) {
    System.out.println(Optional.ofNullable(input).map(Long::valueOf).orElse(null));
}
Run Code Online (Sandbox Code Playgroud)