使用Optional
public static void main(String[] args) {
BigDecimal decimal = null;
//如果为空则默认值为123
BigDecimal a = Optional.ofNullable(decimal).orElseGet(()->new BigDecimal("123"));
//只有为空时调用newOne方法生成999
BigDecimal b = Optional.ofNullable(decimal).orElseGet(()->newOne());
//不管是否为空都会执行handleOne方法,只有为空才使用newOne方法返回值987
BigDecimal c = Optional.ofNullable(decimal).orElse(handleOne());
//为空直接抛异常
BigDecimal d = Optional.ofNullable(decimal).orElseThrow(()->new ValidException("这玩意不能为空,懂?"));
System.out.println(a);
}
private static BigDecimal handleOne(){
BigDecimal a = new BigDecimal("987");
//TODO 还可以干点别的
System.out.println(a);
return a;
}
private static BigDecimal newOne(){
BigDecimal a = new BigDecimal("999");
System.out.println(a);
return a;
}
示例:
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("取值错误");
}
public String getCity(User user) throws Exception{
return Optional.ofNullable(user)
.map(u-> u.getAddress())
.map(a->a.getCity())
.orElseThrow(()->new Exception("取指错误"));
}
if(user!=null){
dosomething(user);
}
Optional.ofNullable(user)
.ifPresent(u->{
dosomething(u);
});
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;
}
}
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;
});
}
AcctBankCard acctBankCard = acctBankCardMapper.selAllByAcctId(acctId);
String end = "钱包";
if(acctBankCard!=null){
if(acctBankCard.getBankAcctNo()!=null){
if(acctBankCard.getBankAcctNo().length()>4){
end = acctBankCard.getBankAcctNo().substring(acctBankCard.getBankAcctNo().length() - 4);
}
}
}
AcctBankCard acctBankCard = acctBankCardMapper.selAllByAcctId(acctId);
String end = Optional.ofNullable(acctBankCard).map(a->a.getBankAcctNo()).filter(v->v.length()>4).map(v->v.substring(v.length() - 4)).orElse("钱包");
TransOrder parentTransOrder = transOrderMapper.selTransOrderInfo(orderNo);
if(parentTransOrder!=null && parentTransOrder.getCashAcctId()!=null){
AcctBankCard acctBankCard = transOrderDetailService.selAcctBankCardInfo(parentTransOrder.getCashAcctId());
if(acctBankCard!=null){
resp.setBank_name(acctBankCard.getBankName());
resp.setBankCardShortName(acctBankCard.getBankCardShortName());
resp.setBank_acct_no(acctBankCard.getBankAcctNo());
}
}
Optional.ofNullable(parentTransOrder).map(TransOrder::getCashAcctId).ifPresent(v->{
AcctBankCard acctBankCard = transOrderDetailService.selAcctBankCardInfo(v);
Optional.ofNullable(acctBankCard).ifPresent(t->{
resp.setBank_name(t.getBankName());
resp.setBankCardShortName(t.getBankCardShortName());
resp.setBank_acct_no(t.getBankAcctNo());
});
});