mapStruct 多个list 转为一个list
时间: 2023-10-01 08:05:58 浏览: 416
可以使用 MapStruct 的 `@MappingTarget` 注解和 Java 8 的 `Stream` API 来实现多个 `List` 转为一个 `List`。
假设你有如下两个类:
```java
public class Source {
private List<Integer> list1;
private List<Integer> list2;
// getters and setters
}
public class Target {
private List<Integer> list;
// getter and setter
}
```
你可以在 Mapper 接口中定义如下方法:
```java
@Mapper
public interface MyMapper {
@Mapping(target = "list", ignore = true)
void updateTarget(@MappingTarget Target target, Source source);
default Target toTarget(Source source) {
Target target = new Target();
updateTarget(target, source);
List<Integer> allList = Stream.of(source.getList1(), source.getList2())
.flatMap(List::stream)
.collect(Collectors.toList());
target.setList(allList);
return target;
}
}
```
这里我们定义了一个辅助方法 `updateTarget`,用于忽略 `Target` 类中的 `list` 字段。然后在 `toTarget` 方法中,我们调用 `updateTarget` 方法,将 `Source` 类中的数据映射到 `Target` 类中,并使用 `Stream` API 将多个 `List` 合并为一个 `List`。
使用时,你可以像下面这样调用:
```java
MyMapper mapper = Mappers.getMapper(MyMapper.class);
Source source = new Source();
source.setList1(Arrays.asList(1, 2, 3));
source.setList2(Arrays.asList(4, 5, 6));
Target target = mapper.toTarget(source);
System.out.println(target.getList()); // 输出 [1, 2, 3, 4, 5, 6]
```
阅读全文