在java8中处理多个Null检查

Roc*_*ock 2 java java-8

我不打算在下面的情况下进行多次空检查,而是计划添加一些可读的代码.可以借助java 8流/地图.有人可以帮我这个

private String getRailsServiceClass(IRailsComponent railsComponent) {
        String serviceClass = "";
        if (railsComponent != null && railsComponent.getRailOffer() != null && railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct() != null && railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList() != null &&
                railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList().get(0).getPassengerFareList() != null && railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList().get(0).getPassengerFareList().get(0).getPassengerSegmentFareList() != null &&
                railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList().get(0).getPassengerFareList().get(0).getPassengerSegmentFareList().get(0).getCarrierServiceClassDisplayName() != null) {
            return railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList().get(0).getPassengerFareList().get(0).getPassengerSegmentFareList().get(0).getCarrierServiceClassDisplayName();
        }
        return serviceClass;
    }
Run Code Online (Sandbox Code Playgroud)

Myk*_*nko 24

您可以使用Optional作为您的目的.

String serviceClass = Optional.ofNullable(railsComponent)
           .map(IRailsComponent::getRailOffer)
           .map(RailOffer::getRailProducts)
           ...
           .orElse("");
Run Code Online (Sandbox Code Playgroud)

  • 这是我第一次看到`Optional`用于其他方面而不是方法的返回值.布拉沃.当然,更好的是,可以修改那些方法(或者至少其中一些方法)以返回"可选". (4认同)

Axe*_*elH 5

您的代码很糟糕,因为在每次检查时,您都必须一次又一次地获取列表中的项目。有很多 I/O 要做。

不使用任何 API(Java 8 之前的解决方案)您可以通过检查每个项目来清理代码(取决于每个类的可访问性,但这里是一个完全开发的条件

RailComponent rc = getRailComponent();
    if (rc != null) {
        RailOffer ro = rc.getRailOffer()
        if (ro != null) {
            RailProduct rp = ro.getRailProducts().get(0).getRailProduct();
            if (rp != null) {
                List<FareBreakDown> fbList = rp.getFareBreakdownList();
                if (fbList != null) {
                    List<PassengerFare> pfList = fb.get(0).getPassengerFareList();
                    if (pfList != null) {
                        List<PassengerSegmentFare> psfList = pfList.get(0).getPassengerSegmentFareList();
                        if (psfList != null) {
                            String carrierServiceClassDisplayName = psfList.get(0).getCarrierServiceClassDisplayName();
                            if (carrierServiceClassDisplayName != null) {
                                return carrierServiceClassDisplayName;
                            }
                        }
                    }
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

一旦你减少了代码的冗长,你就会发现这不是那么多检查