gpt4 book ai didi

java - 从 foreach 循环中删除其他 foreach 中的项目并使用相同的列表

转载 作者:行者123 更新时间:2023-12-01 16:53:25 25 4
gpt4 key购买 nike

我需要从另一个 foreach 中的 foreach 列表中删除对象,以不检查具有相同名称的对象(但该对象中的其他值不同)。

for (Foo foo : fooList) {
// some code
for (Foo foo2 : fooList){
if (foo2.getName() == foo.getName()) {
// some code that stores and manipulates values from foo2
fooList.remove(foo2);
}
}
//some code that using values from many foos with the same name
}

当然这不起作用。

我试图用迭代器做一些事情

Iterator<Foo> iterator = fooList.iterator();

while (iterator.hasNext()) {
Foo foo = iterator.next();
// some code
while (iterator.hasNext()){
Foo foo2 = iterator.next();
if (foo2.getName() == foo.getName()) {
// some code that stores and manipulates values from foo2
iterator.remove();
}
}
//some code that using values from many foos with the same name
}

但这也不起作用......使用Iterator<Foo> iterator = Iterables.cycle(fooList).iterator();这也不是一个好主意。

如果有任何帮助,我将不胜感激!

最佳答案

首先,在 Foo 类中使用 @Override equals() 来决定使两个对象相等的属性以及像 CopyOnWriteArrayList 这样的列表的并发实现之一 允许您在循环列表时进行修改

    static class Foo {
int id;
String name;

public Foo(int id, String name) {
this.id = id;
this.name = name;
}

@Override
public boolean equals(Object obj) {
Foo other = (Foo) obj;
return this.name.equals(other.name);
}

@Override
public String toString() {
return id + ", " + name;
}
}
    public static void main(String[] args) {
List<Foo> list1 = new CopyOnWriteArrayList<>();
List<Foo> list2 = new ArrayList<>();

Foo f1 = new Foo(1, "one");
Foo f2 = new Foo(2, "two");
Foo f3 = new Foo(3, "three");
Foo f4 = new Foo(4, "four");

list1.add(f1);
list1.add(f2);
list1.add(f3);
list1.add(f4);

list2.add(f1);

System.out.println("before remove");
System.out.println(list1);

for (Foo f : list1) {
if (list2.contains(f))
list1.remove(f);
}

System.out.println("after remove");
System.out.println(list1);
}

,输出

before remove
[1, one, 2, two, 3, three, 4, four]
after remove
[2, two, 3, three, 4, four

关于java - 从 foreach 循环中删除其他 foreach 中的项目并使用相同的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61639545/

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