2015-07-13 45 views
1

我有两个ArrayLists,contactModelslist比较动态ArrayList与ArrayList!并删除动态数组中不存在的元素

contactModels是一个Dynamic Arraylist,我需要比较两个列表并删除list中的元素,这些元素不存在于contactModels(DynamicArrayList)中。

我试过嵌套循环,而这个:

for (int i = 0; i < list.size(); i++) 
    {  
    if(!contactModels.get(i).getEmpID().equals(list.get(i).getEmpID())) 
     { 
     databaseadapter.removeContact(contactModels.get(i)); 
     } 

    } 

但我不能达到它。

+2

你的代码是否工作?如果不是,那有什么问题? – 2015-07-13 08:07:36

+0

我可以更新联系人!它已经存在于列表中,但我不能删除不在我的动态数组列表中的联系人! – Praneeth

+0

您可以尝试removeAll(Collection c)方法。它应该这样做。 – Ouney

回答

1

您并未测试contactModels中的项目是否在list中不存在。而是测试contactModels中存在索引的项目是否与list中相同索引的项目不具有相同的ID。

这只有在两个集合都按ID进行排序并且contactModels至少包含与列表一样多的条目时才有效。

是你的情况吗?否则这可能是你的问题。

如果您收藏的项目有equalshashcode正确实现,并且都是平等的,如果他们的ID是平等的,你可以使用类似这样

for (<TypeOfYourItems> item : list) 
    {  
    if(!contactModels.contains(item)) 
     { 
     databaseadapter.removeContact(item); 
     } 
    } 
+0

我的contactModels是一个动态数组列表,它的条目会相应改变!它可能会等于或小于列表! – Praneeth

+0

@praneethkumar然后你不应该使用indizes ...'list'中的索引可能不存在于'contactModels' –

+0

@AndréR.我只是使用了一些这样的事情,它使用contains方法!感谢您指导我 – Praneeth

0

@Praneeth:有Java提供API。所以你可以使用它。 “list.removeAll(contactModels);”

如果contactModel具有非原始元素,那么您可以覆盖equals和hash代码来告知您的对象的基础是什么。

现在您的列表将只包含联系人模型中不存在的唯一元素。

所以,现在你不需要有其他方法来删除它。

+1

原始问题中的代码显示,对于列表中没有联系的每个元素,需要调用databaseadapter上的一个方法...在这种情况下,'removeAll'将无济于事。 –

+0

您可以通过列表并一次性完成,除非它不是由任何第三方提供的,您可以修改它以接受列表,并且一旦您可以执行此操作。 –