0

My first steps with Lombok @Builder.

So I receive ExternalVehicles object from external service (10 cars inside).

public class CarConverter {

    private Car convertToCar(ExternalVehicles vehicles) {

        return Car.builder()
                .plateNumber(getPlateNumberFromObjectNestedInExternalVehicles("plateNumber"))
                .brand(getBrandFromObjectNestedInExternalVehicles("brand"))
                .build();
    }
}

For one car, the null is received in plateNumber field. So I would like to ignore this car and convert only 9.

How can I do this?

1 Answers1

0

There are multiple things to mention:

  1. you can filter the cars before the convertion
externalCars.stream()
     .filter(car -> Objects.nonNull() && isCarValid())
     .map(CarConverter::convertToCar)
     .collect(Collectors.toSet())
  1. you can do some checks within your conversion method and filter afterwards
public class CarConverter {

    private Car convertToCar(ExternalVehicles vehicles) {
        if (vehicles == null || getPlateNumberFromObjectNestedInExternalVehicles("plateNumber") == null)
            return null

        return Car.builder()
                .plateNumber(getPlateNumberFromObjectNestedInExternalVehicles("plateNumber"))
                .brand(getBrandFromObjectNestedInExternalVehicles("brand"))
                .build();
    }
}

and then filter before the collection

externalCars.stream()
     .map(CarConverter::convertToCar)
     .filter(car -> Objects.nonNull())
     .collect(Collectors.toSet())

In my experience, this leads to less NullPointerExceptions

Just for completion, there are also way,to fail the .build() method as seen here: https://stackoverflow.com/a/72654258/1538176

Felix
  • 123
  • 2
  • 12