Как использовать Явные карты с Java 8 и ModelMapper?

Я изучаю, как использовать ModelMapper по официальной документации http://modelmapper.org/getting-started/

Существует пример кода для явного сопоставления с использованием Java 8

    modelMapper.addMappings(mapper -> {
  mapper.map(src -> src.getBillingAddress().getStreet(),
      Destination::setBillingStreet);
  mapper.map(src -> src.getBillingAddress().getCity(),
      Destination::setBillingCity);
});

Как правильно использовать этот код? Когда я набираю этот фрагмент кода в IDE, IDE показывает мне сообщение cannot resolve method map

enter image description here

Ответы

Ответ 1

В этом примере они пропустили шаг, метод, который они используют addMappings, это addMappings из TypeMap, а не из ModelMapper. Вам нужно определить TypeMap для двух ваших объектов. Таким образом:

// Create your mapper
ModelMapper modelMapper = new ModelMapper();

// Create a TypeMap for your mapping
TypeMap<Order, OrderDTO> typeMap = 
    modelMapper.createTypeMap(Order.class, OrderDTO.class);

// Define the mappings on the type map
typeMap.addMappings(mapper -> {
    mapper.map(src -> src.getBillingAddress().getStreet(), 
                      OrderDTO::setBillingStreet);
    mapper.map(src -> src.getBillingAddress().getCity(), 
                      OrderDTO::setBillingCity);
});

Другой способ - использовать метод addMappings из ModelMapper. Он не использует лямбды и принимает PropertyMap. Это тоже достаточно коротко:

ModelMapper modelMapper = new ModelMapper();
modelMapper.addMappings(new PropertyMap<Order, OrderDTO>() {
  @Override
  protected void configure() {
    map().setBillingStreet(source.getBillingAddress().getStreet());
    map().setBillingCity(source.getBillingAddress().getCity());
  }
});