如何比较java </contacts>中的两个arraylist <contacts>

时间:2014-11-10 04:13:01

标签: java arraylist

我正在比较两个arraylist(Contacts .java是一个pojo类)。第一个Arraylist包含一些Items,第二个arraylist包含一些Items。通过比较两个列表,如果两个列表都包含相同的元素,则不应添加它,否则将其添加到第一个列表中。但我不能这样做。以下是我的代码。将不胜感激。

public void insertmanualandxmldata()
{
    mContacts = storage.getarraylist(); // Arraylist
    if(mContacts != null)
    {
        for(int i=0; i<mContacts.size(); i++)
        {
            ContactVO mShareddata = mContacts.get(i);
            //mParsedDataSetList arraylist
            for(int j=0; j<mParsedDataSetList.size(); j++)
            {
                ContactVO mXmldata = mParsedDataSetList.get(j);
                if(mShareddata.getNumber().contains(mXmldata.getNumber()))
                {
                    mContacts.add(mXmldata);
                }
            }
        }
        storage.savearraylist(mContacts);
    }
    else
    {
        storage.savearraylist(mParsedDataSetList);
    }
}

5 个答案:

答案 0 :(得分:2)

  1. 实施可比较的

    private class ContactsVO implements Comparable<ContactsVO>{
    
    int number;
    
    @Override
    public int compareTo(ContactsVO that)
    {
        if (this.number> that.number)
            return 1;
        else if (this.number< that.number)
            return -1;
        else
            return 0;
    
    }
    
    }
    
  2. 你的逻辑..将列表2的内容添加到列表1.添加时我们必须比较列表1是否已经有该项目。

           for(int j=0; j < mParsedDataSetList.size(); j++)
            {
                ContactVO mXmldata = mParsedDataSetList.get(j);
                boolean exists = false;
    
                for(int i=0; i< mContacts.size(); i++)
                {
                    ContactVO mShareddata = mContacts.get(i);
    
                    if(mShareddata.comprareTo(mXmldata) == 0)
                    {
                       exists = true;
                       break; 
                    }
                }
                if(!exists)
                {
                    mContacts.add(mXmldata);
                }
            }
    

答案 1 :(得分:1)

您可以实现一个扩展ArrayList的类并创建一个像这样的Comparator:

public static Comparator<T> Comp = new Comparator<T>(){
    public int compare(Type e1, Type e2){
        return (e1.getSomething().compareTo(e2.getSomething()));
    }
};

如果您之前从未使用过比较器,那么这是一个很好的教程https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html

比较器基本上做的是提供比较元素的标准。

答案 2 :(得分:1)

通过实施比较器或可比较的方法有两种方法 根据您的要求,我建议您在ContactVO课程中implements Comparable。并override compareTo method

private class ContactsVO implements Comparable<ContactsVO> {

    private Integer number;

    // Remaining attributes and their getter setter.

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }

    @Override
    public int compareTo(ContactsVO compareWith) {
        if (this.getNumber() > compareWith.getNumber())
            return 1;
        else if (this.getNumber() < compareWith.getNumber())
            return -1;
        else
            return 0;
    }
}

如果比较属性(在我们的例子中是数字)实现Comparable,那么我们可以将compareTo方法重写为

@Override
public int compareTo(ContactsVO compareWith) {
    return this.getNumber().compareTo(compareWith.getNumber());
}

注意:一些基本数据类型(如Integer,String)实现了Comparable。

答案 3 :(得分:0)

此处contactList1contactList2是您的两个POJO类列表Contacts

Set<Contacts> contactList3 = new HashSet<Contacts>(contactList1);

contactList3.addAll(contactList2);
ArrayList<Contacts> newList = new ArrayList<Contacts>(contactList3);

System.out.println("New List :"+newList);

答案 4 :(得分:0)

尝试使用不允许重复的LinkedHashSet:

ArrayList arrayList1 = new ArrayList();
ArrayList arrayList2 = new ArrayList();

ArrayList arrayList3 = new ArrayList();
arrayList3.addAll(arrayList1);
arrayList3.addAll(arrayList2);

HashSet hashSet = new HashSet();
hashSet.addAll(arrayList3);
arrayList3.clear();
arrayList3.addAll(hashSet);

注意:当您需要维护列表项的排序时,请使用LinkedHashSet而不是HashSet。