2017-09-05 48 views
4

我有以下的ArrayList:ArrayList中的removeAll

ArrayList<Obj o> list1 = new ArrayList<>(); 
ArrayList<String> list2 = new ArrayList<>(); 

我想删除所有从列表1中的元素的有(串)的ID等于从list2中的元素。我怎样才能用removeAll或其他方式做到这一点,而无需额外编写一个。我正在寻找最佳的方式来做到这一点。

预先感谢您。

+1

,所以我不认为你会得到任何比'更好( Iterator it = list1.iterator(); it.hasNext();){if(list2.contains(it.next()。getId())it.remove();}' – daniu

回答

7

如果您使用的是Java 8,你可以这样做:

ArrayList<YourClass> list1 = new ArrayList<>(); 
ArrayList<String> list2 = new ArrayList<>(); 

list1.removeIf(item -> list2.contains(item.getId())); 
// now list1 contains objects whose id is not in list2 

假设YourClassgetId()方法返回一个String


对于Java 7,使用iterator是要走的路:我认为,即使内部的removeAll使用循环

Iterator<YourClass> iterator = list1.iterator(); 
while (iterator.hasNext()) { 
    if (list2.contains(iterator.next().getId())) { 
     iterator.remove(); 
    } 
} 
+0

非常感谢,好像是最好的办法,但我得到的错误:lambda表达式不支持-source 1.7 ... – Vluiz

+0

@Vluis我已经更新了我的答案Java 7 – Jonathan

+0

谢谢,先生! – Vluiz