我不打算在下面的情况下进行多次空检查,而是计划添加一些可读的代码.可以借助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)
您的代码很糟糕,因为在每次检查时,您都必须一次又一次地获取列表中的项目。有很多 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)
一旦你减少了代码的冗长,你就会发现这不是那么多检查