2017-06-16 11 views
-4
String serviceClass = railsComponent 
    .getRailOffer() 
    .getRailProducts() 
    .get(0) 
    .getRailProduct() 
    .getFareBreakdownList() 
    .get(0) 
    .getPassengerFareList() 
    .get(0) 
    .getPassengerSegmentFareList() 
    .get(0) 
    .getCarrierServiceClassDisplayName(); 

これは私に有効なserviceClass値を返します。複数のgetメソッドのjava8でのストリームの使用

私はjava8ストリームコンセプトの助けを借りてこのコードを変換したかったのです。

私は[email protected]として私に値を返している

以下
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(); 

てみました。

私は間違って何をしているのか、このケースではどのように適切な価値を得るのか誰かに教えてもらえますか?

+1

あなたが尋ねたものではありませんが、ここでのnullの場合は、nullで 'toString()'を呼び出すと絶対に 'NullPoiinterException'をスローします。 'findFirst()。orElse(null).toString();' – Todd

+3

ここでstreamを使いたいのですが? –

+0

私は複数のヌルチェックを避けたかったのです。これを使用しようとしています。 –

答えて

1

あなたが使用する必要があるので、あなたは、ここで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); 

はあなただけチェックせずにtoString()を追加することはできませんので、文字列を返すかnullされることに注意してください。

関連する問題