Java 8 使用选项重写if-else空检查

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

有没有一种方法可以使用Optional和lambdas以更简洁、更清晰的方式重写此代码

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;
}