Mapstruct: отображение коллекции на объект - PullRequest
0 голосов
/ 07 мая 2020

У меня есть такая функция:

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 голосов
/ 11 мая 2020

В случае, если ваш 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
...