我有多个列表和多个对象,例如:
class Example {
public static void main(String[] args) {
Dog dog1 = new Dog("MyDog1", 5);
Dog dog2 = new Dog("MyDog2", 2);
Dog dog3 = new Dog("MyDog3", 7);
List<Dog> list1 = new ArrayList<>();
list1.add(dog1);
list1.add(dog2);
list1.add(dog3);
List<Dog> list2 = new ArrayList<>();
list2.add(dog1);
list2.add(dog2);
list2.add(dog3);
List<Dog> list3 = new ArrayList<>();
list3.add(dog1);
list3.add(dog2);
list3.add(dog3);
List<Dog> list4 = new ArrayList<>();
list4.add(dog1);
list4.add(dog2);
list4.add(dog3);
List<Dog> list5 = new ArrayList<>();
list5.add(dog1);
list5.add(dog2);
list5.add(dog3);
}
}
class Dog {
private String name;
private int age;
public Dog(final String name, final int age) {
this.name = name;
this.age = age;
}
}
现在,我想从所有列表中删除dog1,而不要遍历所有列表(在生产中,我有大量的列表和“ dogs”)。 也许可以使用反射删除所有引用,但是我在互联网上找不到类似的内容。
//编辑:
它与删除对象有关,以便释放内存。而且我不想使用list.remove(dog1);
答案 0 :(得分:3)
尝试使用
list1.remove(dog1);
list2.remove(dog1);
list3.remove(dog1);
list4.remove(dog1);
list5.remove(dog1);
答案 1 :(得分:0)
类似的东西吗?
Stream.of(list1, list2, list3, list4, list5).forEach(dogs -> dogs.remove(dog1));
答案 2 :(得分:0)
一种选择是使用WeakReference
,然后将dog1
对象设置为null,
WeakReference dog1 = new WeakReference(new Dog("MyDog1", 5));
WeakReference dog2 = new WeakReference(new Dog("MyDog2", 2));
WeakReference dog3 = new WeakReference(new Dog("MyDog3", 7));
List<WeakReference<Dog>> list1 = new ArrayList<>();
list1.add(dog1);
list1.add(dog2);
list1.add(dog3);
List<WeakReference<Dog>> list2 = new ArrayList<>();
list2.add(dog1);
list2.add(dog2);
list2.add(dog3);
dog1 = null;
System.gc(); //garbage collect