如何在<Integer>不使用Java 8 Stream的情况下找到Java中两个ArrayList之间的区别?



这可能看起来像重复,但事实并非如此,请通读最后。
一些背景:我正在构建一个连接到 API 的安卓应用程序。有一个应用于家具对象的项目"饰面"复选框,当我更新饰面时,我必须将饰面(复选框(发送回后端我要删除。finishes_to_be_removed: []并在数组中传递 id,而添加完成是finishes: [].问题是,我想找到一种方法来区分从复选框生成的两个列表,旧的和更新的。所以我可以填充finishes_to_be_removed: [].

我无法使用 Java 8 Stream,因为我的 API 级别最低为 15。

当我尝试list.contains(list2(时,它告诉"List可能不包含类型List的对象。

我想返回第一个列表中但不在第二个列表中的项目,而不是 1:1 比较。

List.contains()接受与List相同类型的元素,即List<String>允许你调用list.contains("some string"),但你不能将另一个List<String>传递到.contains()

可以工作的示例函数如下所示:

public boolean <T> listContains(List<T> list1, List<T> list2) {
for (T t : list1) {  // iterate through all elements of list1
if (list2.contains(list1)) return true;  // check to see if list2 contains each element
}
return false;  // return false if no matches found
}

编辑

看到您的编辑后,如果您只想获取第一个列表中的元素,而不是第二个列表中的元素,则可以使用:

list1.removeIf(item -> list2.contains(item));

这将从list1中删除包含在list2中的所有项目

最新更新