我有两个共享相同字段的对象:Livre
和LivreVO
。
如何将List<Livre>
的内容复制到List<LivreVO>
?
例如:
List<Livre> liste = service.getListeLivre();
List<LivreVO> listeVO = new ArrayList<LivreVO>(liste);
答案 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));
}