[英]how to compare two arraylist<Contacts> in java
我正在比较两个arraylist(Contacts .java是pojo类)。 第一个Arraylist包含一些项,第二个Arraylist包含一些项。 通过比较两个列表,如果两个列表都包含相同的元素,则不应添加该元素,否则应将其添加到第一个列表。 但是我做不到。 下面是我的代码。 帮助将不胜感激。
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);
}
}
实施可比
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的内容添加到列表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);
}
}
您可以实现一个扩展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
比较器基本上要做的是提供一个比较元素的标准。
实现比较器或可比较器有两种方法。
根据您的要求,我建议您可以在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。
这里contactList1
和contactList2
是您的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);
尝试使用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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.