如何使用 ModelMapper 映射嵌套列表

How to map a nested list using ModelMapper

我遇到了一个问题,我正在使用 ModelMapper 来映射对象,但我发现自己无法使用自定义映射来解决这个问题。

这是我的源模型:

public class UserSource {
    
    private List<IdentitySource> identities;
    
}

public class IdentitySource {
    
    private String firstName;
    private String lastName;
    
}

这是我的目标模型:

public class UserDestination {
    
    private List<NestedIdentityDestination> nestedIdentities;
    
}

public class NestedIdentityDestination {
    
    private IdentityDestination identity;
    
}

public class IdentityDestination {

    private String firstName;
    private String lastName;
    
}

请问有人知道如何使用 ModelMapper 实现这个吗?

经过更多的研究和试验,我明白了。我需要混合使用转换器和类型映射。

这是我的解决方案:

Converter<List<IdentitySource>, List<NestedIdentityDestination>> convertIdentities = new AbstractConverter<>() {
    protected List<NestedIdentityDestination> convert(List<IdentitySource> source) {
        return source.stream().map(identity -> {
            NestedIdentityDestination nestedIdentity = new NestedIdentityDestination();
            nestedIdentity.setIdentity(modelMapper.map(identity, IdentityDestination.class));
            return nestedIdentity;
        }).collect(Collectors.toList());
    }
};

modelMapper.typeMap(UserSource.class, UserDestination.class)
        .addMappings(mapper -> mapper.using(convertIdentities)
                .map(UserSource::getIdentities, UserDestination::setNestedIdentities));

希望这对面临同样问题的其他人有所帮助。