используя java8 stream api для преобразования одного объекта в другой - PullRequest
0 голосов
/ 10 апреля 2020

Я занимаюсь разработкой проекта SpringBoot.

У меня есть Car класс модели:

public class Car {
   private String plateNumber;
   private CarType type;
   private String brand
}

Существует перечисление CarType:

public enum CarType {
   HATCH_BACK, SEDAN, SUV
}

В моем слое DTO у меня есть CarDTO класс:

public class CarDTO {
       private String plateNumber;
       private String type;
       private String brand
}

(Единственное отличие между Car и CarDTO состоит в том, что в CarDTO свойство type представляет собой String тогда как в Car свойство type является CarType).

В Controller я получил список CarDTO в полезной нагрузке запроса:

List<CarDTO> carsFromReq = request.getCars();

Я бы хотел получить List<Car> из List<CarDTO>, как этого добиться с помощью потокового API Java8?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Попробуйте использовать MapStruct . Он генерирует реализации mapper статически, поэтому вам не нужно вручную сопоставлять каждое поле.

@Mapper
public interface CarMapper {

    CarMapper INSTANCE = Mappers.getMapper(CarMapper.class);

    Car map(CarDTO car);

    CarDTO map(Car car);

    List<CarDTO> map(Iterable<Car> car);

    List<Car> mapDtos(Iterable<CarDTO> car);

}

Тогда вы можете использовать его так просто, как указано ниже:

 CarDTO dto = CarMapper.INSTANCE.map(car);
 // ...
 Car car2 = CarMapper.INSTANCE.map(dto);
 // ...
 List<Car> cars = CarMapper.INSTANCE.mapDtos(dtos);
 // ...
 List<CarDTO> dtos = CarMapper.INSTANCE.map(cars);

Примечание. На самом деле официальный MapStruct пример содержит пример, аналогичный вашему.

0 голосов
/ 10 апреля 2020

Создать конструктор всех аргументов в CarDTO. Вы можете использовать @AllArgsConstructor lombok для всех аргументов конструктора.

Затем создать объект CarDTO в .map()

List<CarDTO> carsFromReq = request.getCars().stream()
    .map(car-> new CarDTO(car.getPlateNumber(),car.getType().name(),car.getBrand()))
    .collect(Collectors.toList());
...