2

Dozerを使用して、Javaであるタイプのリストを別のタイプの配列に変換する方法を知りたいです。2つのタイプは、すべて同じプロパティ名/タイプを持っています。たとえば、これら2つのクラスについて考えてみます。

public class A{
    private String test = null;

    public String getTest(){
      return this.test
    }

    public void setTest(String test){
      this.test = test;
    }
}

public class B{
    private String test = null;

    public String getTest(){
      return this.test
    }

    public void setTest(String test){
      this.test = test;
    }
}

私はこれを運が悪かったので試しました。

List<A> listOfA = getListofAObjects();
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
B[] bs = mapper.map(listOfA, B[].class);

また、CollectionUtilsクラスを使用してみました。

CollectionUtils.convertListToArray(listOfA, B.class)

どちらも私のために働いていません、誰かが私が間違っていることを教えてもらえますか?2つのラッパークラスを作成すると、mapper.map関数は正常に機能します。1つはListを含み、もう1つはab[]を含みます。下記参照:

public class C{
    private List<A> items = null;

    public List<A> getItems(){
      return this.items;
    }

    public void setItems(List<A> items){
      this.items = items;
    }
}

public class D{
    private B[] items = null;

    public B[] getItems(){
      return this.items;
    }

    public void setItems(B[] items){
      this.items = items;
    }
}

これは奇妙なことに十分に機能します...

List<A> listOfA = getListofAObjects();
C c = new C();
c.setItems(listOfA);
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
D d = mapper.map(c, D.class);
B[] bs = d.getItems();

ラッパークラス(CおよびD)を使用せずにやりたいことを行うにはどうすればよいですか?もっと簡単な方法が必要です...ありがとう!

4

3 に答える 3

3

反復を開始する前に、listOfAに含まれるアイテムの数を知っています。新しいB[listOfA.size()]をインスタンス化してから、Aを反復処理して、新しいBインスタンスを配列に直接配置してみませんか。listOfB内のすべての項目に対する余分な反復を節約でき、コードは実際に読みやすくなります。

Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();

List<A> listOfA = getListofAObjects();
B[] arrayOfB = new B[listOfA.size()];

int i = 0;
for (A a : listOfA) {
    arrayOfB[i++] = mapper.map(a, B.class);
}
于 2010-06-21T10:47:11.910 に答える
1

わかりました、それで私はばかです。私はDozerが私のためにすべての作業を行うことに慣れていました...私がする必要があるのは、Aのリストを繰り返し処理し、Bのリストを作成してから、そのリストをBの配列に変換することだけでした。

Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
List<A> listOfA = getListofAObjects();
Iterator<A> iter = listOfA.iterator();
List<B> listOfB = new ArrayList<B>();
while(iter.hasNext()){
   listOfB.add(mapper.map(iter.next(), B.class));
}
B[] bs = listOfB.toArray(new B[listOfB.size()]);

問題が解決しました!

于 2010-06-18T02:36:38.793 に答える
0

以下のコードを書くことができればもっと意味があり、それは機能します

List<A> listOfA = getListofAObjects();
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
B[] bs = mapper.map(listOfA, B[].class);
于 2011-05-06T11:27:37.330 に答える