ArrayList removeAll

Vlu*_*uiz 4 java arraylist

我有以下arraylists:

ArrayList<Obj o> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

我想从list1中删除所有(string)ID等于list2中元素的元素.

if(o.getId().equals(one of the strings from list2)) -> remove.
Run Code Online (Sandbox Code Playgroud)

如何使用removeAll或其他方式执行此操作而无需编写额外的for.我正在寻找最佳的方法来做到这一点.

先感谢您.

Jon*_*han 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
Run Code Online (Sandbox Code Playgroud)

假设YourClass有一个getId()返回a 的方法String.


对于java 7,使用iterator是要走的路:

Iterator<YourClass> iterator = list1.iterator();
while (iterator.hasNext()) {
    if (list2.contains(iterator.next().getId())) {
        iterator.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)