gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:54:42 25 4
gpt4 key购买 nike

在下面的代码中,我有两个图像对象列表(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com