我们正在尝试找到一种使用mapstruct将HashMap转换为List的方法,但是互联网上没有这样的帮助。有人知道使用mapstruct做到这一点的方法吗?
我们尝试定义抽象类并使用Abstract映射,但无济于事
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.WARN,
implementationPackage = "com.mapstruct.mapper.impl")
public abstract class OrderLineMapper {
public com.internal.epfo.v1.OrderLine toOrderLineList(Map.Entry<Integer, OrderLine> orderLineEntry) {
com.internal.epfo.v1.OrderLine orderLine = new com.internal.epfo.v1.OrderLine();
orderLine.setCategoryTypeCode(orderLineEntry.getValue().getCategoryTypeCode());
orderLine.getProducts().addAll(getProductInfoList(orderLineEntry.getValue().getProducts()));
return orderLine;
}
List<com.internal.epfo.v1.ProductInfo> getProductInfoList(EnrichProductInfoMap<String, ProductInfo> products) {
List<com.internal.epfo.v1.ProductInfo> productInfo = products.values().stream().collect(Collectors.toCollection( ArrayList<com.internal.epfo.v1.ProductInfo>::new ));
return productInfo;
}
@MapMapping
public abstract List<com.internal.epfo.v1.OrderLine> toOrderLineList(
Map<Integer, OrderLine> orderLine);
}
无法生成从不可迭代类型到可迭代类型的映射方法。
答案 0 :(得分:0)
没有将Map
转换为List
的现成支持。但是,您可以添加自定义方法。
public abstract class OrderLineMapper {
public OrderLineV1 toOrderLine(Map.Entry<Integer, OrderLine> orderLineEntry) {
OrderLineV1 orderLine = new OrderLineV1();
orderLine.setCategoryTypeCode(orderLineEntry.getValue().getCategoryTypeCode());
orderLine.getProducts().addAll(getProductInfoList(orderLineEntry.getValue().getProducts()));
return orderLine;
}
List<ProductInfoV1> getProductInfoList(EnrichProductInfoMap<String, ProductInfo> products) {
List<ProductInfoV1> productInfo = products.values().stream().collect(Collectors.toCollection( ArrayList<ProductInfoV1>::new ));
return productInfo;
}
public List<OrderLineV1> toOrderLineList(Map<Integer, OrderLine> orderLine) {
return orderLine == null ? null : toOrderLineList(orderLine.entrySet());
}
public abstract List<OrderLineV1> toOrderLineList(Collection<Map.Entry<Integer, OrderLine> orderLineCollection);
}