Optional自我觉得是方便我们在开发过程中避免大量的非空判断;
举个栗子如下:
我有一个用户,有两个方法是做事情的方法,我需求是获取做的事情内容并且获取内容的单词数组,
class User{
public String doing(){
String msg ="do some thing";
return msg;
}
public String doingNothing(){
return null;
}
}
常规方法,new User().doing().split(""); 和new User().doingNothing().split("")
这样写第二个明显会报空指针异常,如果后续还有对单词还有后续处理,又要进行非空判断,使用Optional就可以避免判断,如下
import java.util.Arrays;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
public class Test {
public static void main(String[] args) {
User user = new User();
Optional.of(user).map(u -> u.doing()).map(msg->msg.split(" ")).map(word->{
for (String w : word) {
System.out.println(w);
}
return null;
}).orElse(null);
Optional.of(user).map(u -> u.doingNothing()).map(msg->msg.split(" ")).map(word->{
for (String w : word) {
System.out.println(w);
}
return null;
}).orElse(null);
}
static class User{
public String doing(){
String msg ="do some thing";
return msg;
}
public String doingNothing(){
return null;
}
}
}
例子只是将所有字母打印出来了,当然也可以后续处理,这里面根本没有对对象进行非空判断,
重点:
Optional.of(user).map(u -> u)参数u就代表user,当然底层其实是包了一个盒子,这样就不用判断u是否为空了
Optional.of(list).map(l -> l) 这样写l并不是集合里面的每一项,而是list本身,只不过这样也不用判断list为空了,效果是一样的,