【问题标题】:Orika - list to list conversionOrika - 列表到列表的转换
【发布时间】:2014-03-12 06:30:30
【问题描述】:

这可能很简单,但我在文档中找不到。 我有一个人类

class BasicPerson {
   private String name;
   private int age;
   private Date birthDate;
   // getters/setters omitted
}

以及它的列表

ArrayList<Person>

我想把它们改成

ArrayList<PersonDTO>

但没有显式循环。 有没有办法将 MapperFacade.map 用于列表以列出一行转换?

【问题讨论】:

  • 你可以使用 Guava 和 Lists.transform。 link
  • 谢谢。但是 orika 是字节码处理,看起来更快。
  • 另外,我发现很难在其网站顶部使用带有此功能的框架或库code.google.com/p/guava-libraries/wiki/FunctionalExplained - “过度使用 Guava 的函数式编程习惯用法会导致冗长、混乱、不可读和低效这些是迄今为止 Guava 中最容易(也是最常见)被滥用的部分,当你竭尽全力让你的代码“单行”时,Guava 团队会哭泣”

标签: java orika


【解决方案1】:

它内置了这个功能。你试过用这个方法吗

List&lt;D&gt; ma.glasnost.orika.impl.ConfigurableMapper.mapAsList(Iterable&lt;S&gt; source, Class&lt;D&gt; destinationClass)?

我试图找到 Javadoc 的更新版本,但这里是 1.3.5 中的一个。当前版本是 1.4.5。 MapperFacade Class

【讨论】:

  • 是的,上面的答案是正确的。你可以只使用return mapper.mapAsList(basicPerson, PersonDTO.class); 应该被接受。
  • 它将日期转换为longValue,而不是给它一个正确的日期格式。 stackoverflow.com/questions/55141817/…
  • 鉴于问题性质,您已链接,这与 Orika 无关,而是与杰克逊有关。据我所知,成功地将源类映射到目标类。
【解决方案2】:
package com.miya.takeaway.common.util.orika;

import com.miya.takeaway.common.util.orika.converter.ConverterHelper;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.converter.ConverterFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import ma.glasnost.orika.metadata.ClassMapBuilder;
import org.apache.commons.collections4.CollectionUtils;

import java.util.Collections;
import java.util.List;

public class OrikaUtils {

    private static MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();


    public static <T> List<T> map(List<?> objects, Class<T> target) {
        if (CollectionUtils.isEmpty(objects)) {
            return Collections.EMPTY_LIST;
        }
        return mapperFactory.getMapperFacade().mapAsList(objects.toArray(), target);
    }
}

【讨论】:

  • 在答案中添加一些解释
【解决方案3】:

如果使用MapperFacade接口,Orika可以对集合执行mapping multiple times

final MapperFacade mapperFacade = mapperFactory.getMapperFacade();
final List<Person> people = // Get the person instances
final List<PersonDto> personDtos = mapperFacade.mapAsList(people, PersonDto.class);

另一方面,如果你使用BoundMapperFacade接口,它不包含这样一个方便的方法。

最后,如果您选择使用ConfigurableMapper 方法,它还包括一个mapAsList 方法,实际上它委托给MapperFacade.mapAsList 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-12
    • 1970-01-01
    • 2017-05-31
    • 2018-04-21
    • 1970-01-01
    • 2012-11-02
    • 2016-11-30
    相关资源
    最近更新 更多