Java 8 使用选项重写if-else空检查
有没有一种方法可以使用Optional和lambdas以更简洁、更清晰的方式重写此代码Java 8 使用选项重写if-else空检查,java-8,optional,Java 8,Optional,有没有一种方法可以使用Optional和lambdas以更简洁、更清晰的方式重写此代码 private boolean pricingIndicator(AvgBuySellPriceTerm avgBuySellPriceTerm){ if(avgBuySellPriceTerm == null){ return false; }else{ if(avgBuySellPriceTerm.getIndicator()!= null &&am
private boolean pricingIndicator(AvgBuySellPriceTerm avgBuySellPriceTerm){
if(avgBuySellPriceTerm == null){
return false;
}else{
if(avgBuySellPriceTerm.getIndicator()!= null && ! avgBuySellPriceTerm.getIndicator().isEmpty()){
return true;
}else{
return false;
}
}
}
这里有一个带有
可选的建议:
private boolean pricingIndicator(AvgBuySellPriceTerm avgBuySellPriceTerm){
return Optional.ofNullable(avgBuySellPriceTerm)
.map(AvgBuySellPriceTerm::getIndicator)
.map(i -> !i.isEmpty()) // return true if getIndicator
// is not empty
.orElse(false);
}
但不确定这是否更具可读性 下面应该使用可选::of nullable
和经典的映射
,过滤器
和isPresent
方法来实现
private boolean pricingIndicator(AvgBuySellPriceTerm avgBuySellPriceTerm){
return Optional.ofNullable(avgBuySellPriceTerm)
.map(AvgBuySellPriceTerm::getIndicator)
.filter(ind -> !ind.isEmpty())
.isPresent();
}
同样,这里不使用lambdas,而是保持可读性。第一个if
语句可以省略,因此可以归结为:
private boolean pricingIndicator(AvgBuySellPriceTerm avgBuySellPriceTerm){
if(avgBuySellPriceTerm != null && avgBuySellPriceTerm.getIndicator()!= null && !avgBuySellPriceTerm.getIndicator().isEmpty()){
return true;
}
return false;
}
不回答您的问题,只是以更精简的方式提出:两个else
语句都是不必要的,这在需要时不会返回true。事实上,它不能通过编译。指示符可以是字符串,当然,这远远不能提高可读性。读者需要解释带有否定的代码,以了解它的实际功能。另一方面,它是一致的,甚至将OP的愿望发挥到极致,以取代可以用简单的return avgBuySellPriceTerm!=null&&avgBuySellPriceTerm.getIndicator()!=空&!avgBuySellPriceTerm.getIndicator().isEmpty()
与代码一起做花哨的可选的东西…但是你删除了avgBuySellPriceTerm
的空检查。如果avgBuySellPriceTerm
为空,这将中断。是的,很抱歉,修复了(复制粘贴戏剧)“第一个if
语句可以省略”是不正确的,因为你已经发现了,但可以与后续条件合并,就像编辑时所做的那样。所以这句话也需要改编。然后,考虑表单“代码>语句(如果条件)返回true的语句;[否则]返回false
可以被一个简单的返回条件替换代码>,即返回avgBuySellPriceTerm!=null&&avgBuySellPriceTerm.getIndicator()!=空&!avgBuySellPriceTerm.getIndicator().isEmpty()代码>
private boolean pricingIndicator(AvgBuySellPriceTerm avgBuySellPriceTerm){
if(avgBuySellPriceTerm != null && avgBuySellPriceTerm.getIndicator()!= null && !avgBuySellPriceTerm.getIndicator().isEmpty()){
return true;
}
return false;
}