在java8中使用stream来获取多个get方法

时间:2017-06-16 13:43:47

标签: java java-8

String serviceClass = railsComponent
    .getRailOffer()
    .getRailProducts()
    .get( 0 )
    .getRailProduct()
    .getFareBreakdownList()
    .get( 0 )
    .getPassengerFareList()
    .get( 0 )
    .getPassengerSegmentFareList()
    .get( 0 )
    .getCarrierServiceClassDisplayName();

这会返回有效的serviceClass值。

我想在java8流概念的帮助下转换此代码。

我试过下面的

String serviceClass = railsComponent.getRailOffer().getRailProducts().stream()
                .map(railProcucts -> railProcucts.getRailProduct().getFareBreakdownList().stream()
                .map(fareBreakdownType -> fareBreakdownType.getPassengerFareList().stream()
                .map(passengerFareType -> passengerFareType.getPassengerSegmentFareList().stream()
                .map(segmentFareType -> segmentFareType.getCarrierServiceClassDisplayName())))).findFirst().orElse(null).toString();

将java值作为java.util.stream.ReferencePipeline$3@5585427d返回。

有人可以告诉我我做错了什么以及在这种情况下如何获得适当的价值。

1 个答案:

答案 0 :(得分:2)

您在map而不是flatMap使用,因此您应该使用:

railsComponent.getRailOffer().getRailProducts().stream()
    .flatMap(rp -> rp.getFareBreakdownList().stream())
    .flatMap(fb -> fbl.getPassengerFareList().stream())
    .flatMap(pf -> pfl.getPassengerSegmentFareList().stream())
    .map(psf -> psf.getCarrierServiceClassDisplayName())
    .findFirst()
    .orElse(null);

请注意,它会返回字符串或null,因此您无法在不经过检查的情况下添加toString()