【问题标题】:How to find the difference between two ArrayList<Integer> in Java without using Java 8 Stream? [duplicate]如何在不使用 Java 8 Stream 的情况下找到 Java 中两个 ArrayList<Integer> 之间的区别? [复制]
【发布时间】:2020-05-08 00:32:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我编辑了问题
  • stackoverflow.com/a/27002940/2958086 那个骗子的答案
  • @Compass 第一个答案仍然是一个好方法,只有一件事要提:如果原始 List 包含重复项,则将其转换为 Set 将消除它们。

标签: java android arrays


【解决方案1】:

List.contains() 采用与List 相同类型的元素,即List&lt;String&gt; 允许您调用list.contains("some string"),但您不能将另一个List&lt;String&gt; 传递给.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 中的所有项目

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2020-01-06
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多