Mapstructを使用して、あるPOJOを別のPOJOにマッピングする定型コードを処理しています。ここで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);
インタフェースも名map
とAttributeTO
する方法マッピングAttribute
が含ま。
Map
からCollection
へのこの変換をより洗練された方法で実装できますか?私のアプローチは機能していますが、それは欠点です。例えば、リファクタリングは、文字列内のコードフラグメントを認識しません。
これを私のインターフェイスに追加すると、コンパイル時に次のエラーが発生します。反復可能でない型から反復可能な型にマッピングメソッドを生成できません。 –
これは奇妙なことですが、あなたは 'default'キーワードでそれを追加していますか? 'default'を使う代わりに、utilクラスと静的メソッドを持っていれば(あなたのマッピングがステートレスの場合) – Filip
答えをありがとう!私はインターフェイスで間違って使用しました。私のせい...アプローチは正しい方法です。 –