如何组合两个列表(或两个任何其他类型的集合)

时间:2015-01-24 15:19:16

标签: java collections

我有班级ViewPartner.java。该课程如下所示

public class ViewPartner {
    private Integer id;
    //GET, SET
    //Other properties
}

我有两个List<ViewPartner>,说lst1lst2,我需要按以下方式合并: 如果ViewPartner id lst1 lst2 ViewPartner lst1apache commons google guava List {{1}} ,否则从两个列表中。

我正在使用{{1}}和{{1}} ...也许有一些即时方法?

在这里严格使用{{1}}对我来说并不重要。

2 个答案:

答案 0 :(得分:5)

您可以创建一个包含以下内容的唯一项目列表:

Set<ViewPartner> union = new HashSet<ViewPartner>( list1 );
union.addAll( list2 );

集合(设置)union现在将具有来自两个列表的唯一项,因为Set不允许重复值。

此外,您需要在Object.equals()类中为成员Object.hashCode()实施ViewPartnerid方法。

答案 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的对象将被视为相等,这可能不是人们所希望的行为。此外,对于今天的计算机,迭代非常快,所以除非你的两个列表非常大,否则性能不会成为一个问题。