java - 从两个自定义对象列表中删除公共(public)元素

标签 java android list object

在下面的代码中,我有两个图像对象列表(fromTagList 和 fromImageList)。图像类有一个属性图像URL。两个列表中有共同的对象。

我的目标是根据它们的 URL 属性检测这些公共(public)元素并将它们从两个列表中删除,以便两个列表将包含不同的元素,然后我将这两个列表合并为一个列表,以便该合并列表将包含不同的对象。问题是我使用的下面的方法没有删除所有常见元素,因为我认为这样它会跳过一些索引。

for (int i = 0; i < fromTagList.size(); i++) {
    for (int k = 0; k < fromImageList.size(); k++) {
        if (fromTagList.get(i).getImageURL().equals(fromImageList.get(k).getImageURL())) {
            fromTagList.remove(i);
            fromImageList.remove(k);
        }
    }
}

最佳答案

.remove(index) 删除了元素,这使得列表更短,但你的索引没有考虑到这一点,并不断添加 1,但实际上跨过 2 个元素(+1 和删除的元素)。

这适用于内联删除重复元素,但当一个列表包含重复元素时,它会失败。它适用于列表中没有重复元素的情况,因为我向后遍历元素。请注意标记为“继续”。

//the new ArrayList is needed so remove is supported
    List<String> fromTagList = new ArrayList(Arrays.asList(new String[] {"a", "b", "c", "1", "2", "3"}));
    List<String> fromImageList = new ArrayList(Arrays.asList(new String[] {"b", "b", "c", "d", "2", "3", "4"}));

    outer: for (int i = fromTagList.size()- 1; i >= 0; i--) {
        for (int k = fromImageList.size() - 1; k >= 0; k--) {
        System.out.println("i: " + i + " k: " + k);
        if (fromTagList.get(i).equals(fromImageList.get(k))) {
            fromTagList.remove(i);
            fromImageList.remove(k);
            continue outer;
        }
        }
    }

    System.out.println("fromTag  : " + fromTagList);
    System.out.println("fromImage: " + fromImageList);

如果您想支持具有重复元素的列表,我认为您不能随意删除。我建议添加到要删除的新元素列表中。

关于java - 从两个自定义对象列表中删除公共(public)元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56083808/

相关文章:

python - 尝试将文件名传输到不同的函数

java - 由 : android. view.InflateException : Binary XML file line #9: Error inflating class android. widget.ImageView 引起

当我单击 Collection 夹图标时,索引 "1"处的 java.lang.ArrayIndexOutOfBoundsException ,大小 "1"

java - 带提示的多选微调器

r - 两个列表的总和

javascript - 在 For 循环中探索 javascript 中的树结构

java - java -cp 命令中有多个 jar 文件时出现错误 "Error: Could not find or load main class"

java - Buttom "Save"保存空白 Canvas

java - 如何在 Selenium 中打印页面中的所有链接并选择任意 3 个随机 URL

android - 如何在android中绘制范围图和烛台图?