mapstruct转换list指定某个转换对象
时间: 2023-08-13 14:04:59 浏览: 161
map转化为list
5星 · 资源好评率100%
如果你想在将一个 `List` 转换成另一个 `List` 的过程中,只针对其中的某个对象进行转换,可以使用 MapStruct 提供的 `@IterableMapping` 注解。
举个例子,假设我们有两个类 `Source` 和 `Target`:
```java
public class Source {
private String name;
private int age;
// getter/setter
}
public class Target {
private String fullName;
private int yearsOld;
// getter/setter
}
```
现在我们有一个 `List<Source>`,我们只想将其中 `name` 属性为 "Tom" 的对象转换成 `Target` 对象,我们可以定义一个映射方法:
```java
@Mapper
public interface SourceTargetMapper {
@Mapping(source = "name", target = "fullName")
@Mapping(source = "age", target = "yearsOld")
Target sourceToTarget(Source source);
@IterableMapping(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
List<Target> sourceListToTargetList(List<Source> sourceList, @ElementTargetType Class<? extends Target> targetType);
}
```
在上面的代码中,我们使用 `@Mapping` 注解来指定将 `Source` 的 `name` 属性映射到 `Target` 的 `fullName` 属性,将 `Source` 的 `age` 属性映射到 `Target` 的 `yearsOld` 属性。然后我们定义了一个 `sourceListToTargetList` 方法,该方法使用 `@IterableMapping` 注解来标记这是一个 `List` 类型的映射方法,并且使用 `@ElementTargetType` 注解来指定要转换成的目标类型。在方法内部,我们使用 `stream()` 方法遍历 `List`,然后只对 `name` 属性为 "Tom" 的对象进行转换。
需要注意的是,我们需要将 `@IterableMapping` 注解的 `nullValueMappingStrategy` 属性设置为 `NullValueMappingStrategy.RETURN_DEFAULT`,否则在转换过程中,如果某个对象不符合转换条件,会将其转换成 `null`,从而导致 `NullPointerException`。
阅读全文