使用java8流api将一个对象转换为另一个对象

时间:2020-04-10 04:40:51

标签: java spring-boot java-8 dto

我正在开发一个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
}

CarCarDTO之间的唯一区别是,在CarDTO中,type属性是String,而在Car中,{ {1}}属性是type)。

在Controller中,我在请求有效负载中获得了CarDTO列表:

CarType

我想从List<CarDTO> carsFromReq = request.getCars(); 中抽出List<Car>,如何用Java8流API实现这一目标?

2 个答案:

答案 0 :(得分:0)

在CarDTO中创建一个全参数构造函数。 您可以对所有参数构造函数使用lombok的@AllArgsConstructor

然后在.map()中创建CarDTO对象

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

答案 1 :(得分:0)

尝试使用MapStruct。它静态生成映射器实现,因此您不必手动映射每个字段。

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

然后您可以使用它,如下所示:

Azure Build Pipeline

注意: 实际上,MapStruct官方网站上的示例与您的网站非常相似。