如果使用其他可选内容,则重写null检查

时间:2019-03-18 11:00:28

标签: java-8 optional

是否有一种方法可以更简洁明了地使用Optional和lambda重写它?

private boolean pricingIndicator(AvgBuySellPriceTerm avgBuySellPriceTerm){
    if(avgBuySellPriceTerm == null){
        return false;
    }else{
        if(avgBuySellPriceTerm.getIndicator()!= null && ! avgBuySellPriceTerm.getIndicator().isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}

4 个答案:

答案 0 :(得分:2)

这是Optional的建议:

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

答案 1 :(得分:2)

以下应该使用Optional::ofNullable和经典的mapfilterisPresent方法来做到这一点

private boolean pricingIndicator(AvgBuySellPriceTerm avgBuySellPriceTerm){
    return Optional.ofNullable(avgBuySellPriceTerm)
                   .map(AvgBuySellPriceTerm::getIndicator)
                   .filter(ind -> !ind.isEmpty())
                   .isPresent();
}

答案 2 :(得分:1)

!Optional.ofNullable(t)
         .map(AvgBuySellPriceTerm::getIndicator)
         .map(List::isEmpty)
         .orElse(true);

虽然不确定这是否更具可读性。

答案 3 :(得分:0)

同样,这里不使用lambda而是保持可读性。第一个if语句可以省略,因此可以简化为:

private boolean pricingIndicator(AvgBuySellPriceTerm avgBuySellPriceTerm){
    if(avgBuySellPriceTerm != null && avgBuySellPriceTerm.getIndicator()!= null && !avgBuySellPriceTerm.getIndicator().isEmpty()){
        return true;
    }

    return false;
}