我有班级ViewPartner.java
。该课程如下所示
public class ViewPartner {
private Integer id;
//GET, SET
//Other properties
}
我有两个List<ViewPartner>
,说lst1
和lst2
,我需要按以下方式合并:
如果ViewPartner
id
lst1
lst2
ViewPartner
lst1
和apache commons
google guava
List
{{1}} ,否则从两个列表中。
我正在使用{{1}}和{{1}} ...也许有一些即时方法?
在这里严格使用{{1}}对我来说并不重要。
答案 0 :(得分:5)
您可以创建一个包含以下内容的唯一项目列表:
Set<ViewPartner> union = new HashSet<ViewPartner>( list1 );
union.addAll( list2 );
集合(设置)union
现在将具有来自两个列表的唯一项,因为Set
不允许重复值。
此外,您需要在Object.equals()
类中为成员Object.hashCode()
实施ViewPartner
和id
方法。
答案 1 :(得分:0)
我会这样做:
for (final ViewPartner viewPartner : lst2) {
if (!containsViewPartnerWithId(lst1, viewPartner.getId())) {
lst1.add(viewParner);
}
}
//...
private boolean containsViewPartnerWithId(final List<ViewPartner> list, final Integer id) {
for (final ViewPartner viewPartner : list) {
if (id.equals(viewPartner.getId())) {
return true;
}
}
return false;
}
我不想在这个实例中使用equals / hashcode的原因是你要检查id,如果这是由例如数据库设置的,那么尚未分配id的对象将被视为相等,这可能不是人们所希望的行为。此外,对于今天的计算机,迭代非常快,所以除非你的两个列表非常大,否则性能不会成为一个问题。