如何在推土机中绘制馆藏地图

2022-09-01 20:06:59

我想做这样的事情:

ArrayList<CustomObject> objects = new ArrayList<CustomObject>();
...
DozerBeanMapper MAPPER = new DozerBeanMapper();
...
ArrayList<NewObject> newObjects = MAPPER.map(objects, ...); 

若:

<mapping>
  <class-a>com.me.CustomObject</class-a>
  <class-b>com.me.NewObject</class-b>   
    <field>  
      <a>id</a>  
      <b>id2</b>  
    </field>  
</mapping>

我试过了:

ArrayList<NewObject> holder = new ArrayList<NewObject>();
MAPPER.map(objects, holder);

但持有者对象为空。我也玩弄了改变第二个论点,没有任何运气......


答案 1

引用:

“嵌套集合是自动处理的,但您是对的,顶级集合需要迭代。目前没有比这更优雅的处理方式了。

有人已经找到了一种方法,可以在您的代码库中不使用循环构造,但我认为将其放在代码中更容易(并且更具可读性/可维护性)。希望他们能尽快添加此功能。


答案 2

我遇到了类似的问题,并决定使用通用实用程序方法来避免每次需要执行此类映射时进行迭代。

public static <T, U> List<U> map(final Mapper mapper, final List<T> source, final Class<U> destType) {

    final List<U> dest = new ArrayList<>();

    for (T element : source) {
        dest.add(mapper.map(element, destType));
    }

    return dest;
}

然后用法将如下所示:

    final List<CustomObject> accounts..... 
    final List<NewObject> actual = Util.map(mapper, accounts, NewObject.class);

不过,这可能可以进一步简化。


推荐