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

這會返回我有效的serviceClass值。java8中用於多個獲取方法的流的使用

我想轉換此代碼與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(); 

這是我返回值作爲[email protected]

有人能告訴我我做錯了什麼,以及我在這種情況下如何獲得適當的價值。

+1

這不是你問的問題,但是如果你在空的時候調用'toString()',這裏的null情況絕對會拋出'NullPoiinterException'。 'findFirst()。orElse(null).toString();' – Todd

+3

爲什麼你想在這裏使用流? –

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

注意,將返回字符串或null,所以你不能只是添加toString()沒有檢查。

相關問題