问题描述
我是 Java 新手。我有 dto 对象列表,我需要通过遍历 dtos 列表将其转换为实体列表。
我不应该使用模型映射器或 MapStruct 或 BeanUtils。我需要以 Java 方式执行此操作,但不确定如何同时迭代两个列表。
public class AddressDto {
private String unitNo;
private String floorNo;
private String buildingName;
private String areaName;
//getters and setters
}
public class AddressEntity {
private String unitNo;
private String floorNo;
private String buildingName;
private String areaName;
//getters and setters
}
public void getAddress() {
List<AddressDto> addressDtoList=new ArrayList<>();
addressDtoList.add(new AddressDto("174","7","grove","BR"));
List<AddressEntity> addressEntityList=new ArrayList<>();
addressEntityList.add(new AddressEntity("28","13","Green","Tampa"));
List<AddressEntity> addressEntityListResult=convertDtoToEntity(addressDtoList);
}
private List<AddressEntity> convertDtoToEntity(List<AddressDto> aDto) {
List<AddressEntity> newAddressEntityList = null;
for (AddressDto dto : aDto) {
//Generate and Return the newAddressEntityList by replacing Green with grove and BR with Tampa
}
return newAddressEntityList;
}
它应该只用格罗夫代替格林,用坦帕代替 BR。其余对象如“28”、“13”应保持不变。
解决方法
如今,Java 的方式是使用 Stream API。
这里有一段关于如何将 List<AddressDto>
转换为 List<AddressEntity>
private static List<AddressEntity> convertDtoToEntity(List<AddressDto> aDto) {
return aDto.stream()
.map(dto -> new AddressEntity(dto.getUnitNo(),dto.getFloorNo(),dto.getBuildingName(),dto.getAreaName()))
.collect(Collectors.toList());
}
传递给 .map
方法的函数负责将流的每个元素从 AddressDto 转换为 AddressEntity。
您收到了一个很好的答案,但这里有另一种方法:
private List<AddressEntity> convertDtoToEntity(List<AddressDto> aDto) {
List<AddressEntity> newAddressEntityList = new ArrayList<>();
for (AddressDto dto : aDto) {
AddressEntity addressEntity = new AddressEntity(
dto.getUnitNo(),dto.getAreaName()
);
newAddressEntityList.add(addressEntity);
}
return newAddressEntityList;
}