1
我正在使用Mapstruct來處理將一個POJO映射到另一個POJO的樣板代碼。將集合映射到Map並反之亦然使用Mapstruct
這裏是DTO:
import java.util.Collection;
public class TestTO {
String name;
Collection<AttributeTO> attributes;
}
這裏是映射的POJO:
import java.util.Map;
public class Test {
String name;
Map<String, Attribute> attributes;
}
我正在尋找一個優雅的方式來處理Map
和Collection
之間的映射。目前,我正在使用@Mapping
註釋的expression
屬性。由於Attribute
引用Test
我正在使用「映射與循環」示例中的CycleBreakingContext
。
@Mapping(target = "attributes", expression = "java(test.getAttributes().values().stream().map(a -> this.map(a, context)).collect(java.util.stream.Collectors.toList()))")
abstract TestTO map(Test test, @Context CycleBreakingContext context);
該接口還包含方法映射到Attribute
與AttributeTO
名稱map
。
是否有一種更優雅的方式來實現非迭代Map
到Collection
的轉換?我的方法正在工作,但有缺點。例如,重構不能識別字符串中的代碼片段。
如果我將此添加到我的接口,在編譯期間出現以下錯誤:無法生成從非可迭代類型到可迭代類型的映射方法。 –
這很奇怪,你確定要用'default'關鍵字添加它嗎?使用'default'的替代方法是使用util類和靜態方法(如果映射是無狀態的話)。 – Filip
感謝您的回答!我在界面中使用了錯誤。我的錯......這種方法是正確的方法。 –