将ArrayList的内容复制到另一个具有不同对象的内容

时间:2017-02-14 14:10:05

标签: java

我有两个共享相同字段的对象:LivreLivreVO

如何将List<Livre>的内容复制到List<LivreVO>

例如:

List<Livre> liste = service.getListeLivre();
List<LivreVO> listeVO = new ArrayList<LivreVO>(liste);

3 个答案:

答案 0 :(得分:4)

除非Livre和Livre0这两个类共享一个共同的超类型;你不能(轻松)。

你能做什么:

List<Livre0> listeV0 = new ArrayList<>();
for (Livre livre : service.getListeLivre()) {
  Livre0 copy = new LivreV0(...);
  listeV0.add(copy);
}

换句话说:您必须创建对象;和如何你做这取决于你现有的类。一个合理的方法可能是在LivreV0中有一个带有Livre对象的构造函数;并从那里获取所有相关属性。

最糟糕的情况是,您可能需要查看反射。这将允许您基本上查询Livre-Object中的所有字段;并使用该信息将值推送到Livre0-Object中的同名域中。 工作,但繁琐且容易出错。

而且:这里也可能值得退一步。单独使用两个具有相同字段的不同类的想法......听起来像设计问题。因此,真正的答案可能是重新考虑您的对象模型。可能你应该有一个第三个类,其中包含你需要为Livre和Livre0 常见的所有属性。含义:您将该数据推送到Common个对象中,而不是重复所有这些信息;然后你的Livre和Livre0对象“指向”Common对象。

答案 1 :(得分:1)

假设有一个LivreVO构造函数接受Livre

LivreVO(Livre object){
  // copy common fields. 
}

现在我们可以将List<Livre> liste转换为List<LivreVO> listeVO

List<LivreVO> listeVO = liste.stream().map(LivreVO::new).
                              collect(Collectores.toList());

或者您可以创建新的LivreVO对象并手动填充它们:

List<LivreVO> listeVO = liste.stream().map(livre -> {
                           LivreVo tmp = new LivreVo();
                           tmp.setCommonField(livre.getCommonField());
                           //...
                           retrun tmp;
                        }).collect(Collectores.toList());

答案 2 :(得分:0)

您需要一些机制将Livre转换为LivreVO,然后执行类似的操作:

List<LivreVO> listeVO = new ArrayList<>();
for (Livre l: service.getListeLivre()) {
    listVo.add(convert(l));
}