User user = null;
1.用户不存在,抛出异常
Optional.ofNullable(user).orElseThrow(()->new Exception("用户不存在"));
2.用户不存在,创建用户
user = Optional.ofNullable(user).orElse(createUser());
3.如果用户不为空:
isPresent
即判断value值是否为空, 不要写成:
User user = Optional.ofNullable(user);
if (Optional.isPresent()){
// TODO: do something
}
因为这样写,代码结构依然丑陋。
应该如下: 表示,如果value不为空,去操作业务
Optional.ofNullable(user).ifPresent(u->{
// TODO: do something
});
4. filter 条件过滤
Optional<User> user1 = Optional.ofNullable(user).filter(u -> u.getName().length()<6);
如上所示,如果user的name的长度是小于6的,则返回。如果是大于6的,则返回一个EMPTY对象。
实战写法:
例1:
以前写法:
public String getCity(User user) throws Exception{
if(user!=null){
if(user.getAddress()!=null){
Address address = user.getAddress();
if(address.getCity()!=null){
return address.getCity();
}
}
}
throw new Excpetion("取值错误");
}
JAVA8写法:
public String getCity(User user) throws Exception{
return Optional.ofNullable(user)
.map(u-> u.getAddress())
.map(a->a.getCity())
.orElseThrow(()->new Exception("取值错误"));
}
例2:
以前写法:
if(user!=null){
dosomething(user);
}
JAVA8写法:
Optional.ofNullable(user)
.ifPresent(u->{
dosomething(u);
});
例3:
以前写法:
public User getUser(User user) throws Exception{
if(user!=null){
String name = user.getName();
if("zhangsan".equals(name)){
return user;
}
}else{
user = new User();
user.setName("zhangsan");
return user;
}
}
JAVA8写法:
public User getUser(User user) {
return Optional.ofNullable(user)
.filter(u->"zhangsan".equals(u.getName()))
.orElseGet(()-> {
User user1 = new User();
user1.setName("zhangsan");
return user1;
});
}