这可能看起来像重复,但事实并非如此,请通读最后。
一些背景:我正在构建一个连接到 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
中的所有项目