Mapstruct:将集合映射到对象

时间:2020-05-07 14:33:08

标签: collections mapping mapstruct

我有一个类似的功能:

public HousesDTO mapHouses(Set<Home> roles) {
        HousesDTO homes = new HousesDTO();
        List<HouseDTO> dtos = new ArrayList<HouseDTO>();
        for (Home home : homes) {
            HouseDTO dto = new HouseDTO(home.getAddress(), home.getPrice());
            dtos.add(dto);
        }
          homes.setAllHomes(dtos);
          return homes;
        }
        return null;
    }

如何使用Mapstruct做到这一点?

1 个答案:

答案 0 :(得分:0)

如果您的HouseDTO具有无参数的构造函数和值的设置器,则可以这样操作:

@Mapper
public interface HousesMapper {
    default HousesDTO toHouses(Set<Home> homes) {
        HousesDTO housesDTO = new HousesDTO();
        housesDTO.setAllHomes(toHousesList(homes));

        return housesDTO;
    }

    List<HouseDTO> toHousesList(Set<Home> homes);
}

如果HouseDTO仅具有一个期望属性的构造函数,则剩下三个选项:

  1. 等待MapStruct 1.4版本,它将支持构造函数的实例化
  2. 创建一个默认方法,在其中您可以手动从Home映射到HouseDTO
  3. 创建构建器,请参见https://mapstruct.org/documentation/stable/reference/html/#mapping-with-builders