使用 Java 8 将 dtos 列表生成到实体列表

问题描述

我是 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;
}