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

this returns me valid serviceClass value.

I wanted to convert this code with the help of java8 stream concept.

I tried with below

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

which is returning me value as java.util.stream.ReferencePipeline$3@5585427d .

Can someone tell me what am I doing wrong and how I get proper value in this case.

Eugene
  • 117,005
  • 15
  • 201
  • 306
Rocker rock
  • 155
  • 2
  • 11

1 Answers1

2

You are using here map instead of flatMap, so you should use:

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

Be aware that will return String or null, so you cannot just add toString() without check.

ByeBye
  • 6,650
  • 5
  • 30
  • 63