Java 将同一匿名对象添加到单独的集合

Java 将同一匿名对象添加到单独的集合,java,Java,考虑到以下代码 ArrayList<SomeObject> One = new ArrayList<SomeObject>(); ArrayList<SomeObject> Two = new ArrayList<SomeObject>(); One.add(new SomeObject()); 是否可以将此对象添加到第二个列表中,而不以非匿名方式创建它?可能总是厚颜无耻,而且 secondList.add(firstList.get(0));

考虑到以下代码

ArrayList<SomeObject> One = new ArrayList<SomeObject>();
ArrayList<SomeObject> Two = new ArrayList<SomeObject>();

One.add(new SomeObject());

是否可以将此对象添加到第二个列表中,而不以非匿名方式创建它?

可能总是厚颜无耻,而且

secondList.add(firstList.get(0));
但那只是一段可怕的代码。保留一个引用,或者更好。问问自己,为什么您的设计需要两个列表中的相同对象

您总是可以从第一个列表中获得它,然后立即进入第二个列表

Two.add(One.get(0));
然而,这取决于它始终是第一个列表中的第一个

创建一个变量并给它命名没有什么错

ArrayList<SomeObject> one = new ArrayList<SomeObject>();
ArrayList<SomeObject> two = new ArrayList<SomeObject>();

SomeObject someObject = new SomeObject();
one.add(someObject);
two.add(someObject);
更具可读性


此外,根据标准命名约定,Java中的变量名称应以小写字母开头,例如1和2。

如果其中一个共享对象变为null,则应将其从其驻留的所有列表中删除

制作人:

p1.add(work_list);
p1.add(work_list2);
p2.add(work_list);
p3.add(work_list);
p4.add(work_list);
p5.add(work_list);
p6.add(work_list);
p7.add(work_list);
消费者:

c[0].add(work_done);
c[1].add(work_done2);
c[2].add(work_done);

如果不想对对象进行非匿名引用,有两种获取方法

如果您有一个标识符,并且只需要一个对象,那么从列表中获取它很好 如果需要列表中的所有对象,请将一个列表中的所有对象添加到另一个商品 对于第一种方法,您可以在列表中循环,直到找到对象的某种标识符(例如id),然后将其添加到第二个列表中。如果您没有明确的标识符,这将不起作用,因为您无法判断是否添加了正确的项。这种方法的一个例子是:

for(Object o : one){
    if(o.getId() == someId){
        two.add(o);
    }
}
one.addAll(two);
two.add(one.get(0));
至于第二个方法,Java中的集合包含addAll方法。这将通过获取一个集合的所有内容并将其添加到另一个集合中来实现。只有当您有一个包含1个项目的列表,或者需要从一个列表到另一个列表的所有项目时,这才有效。无法使用此方法专门针对单个对象。如何做到这一点的一个例子是:

for(Object o : one){
    if(o.getId() == someId){
        two.add(o);
    }
}
one.addAll(two);
two.add(one.get(0));
或者,如果您知道要复制的项目始终是从中获取该项目的列表中的第一个项目,则可以将索引为0的项目从一个列表复制到另一个列表。这只有在您确定它将始终位于索引0时才有效,因此使用它是不明智的。这方面的一个例子是:

for(Object o : one){
    if(o.getId() == someId){
        two.add(o);
    }
}
one.addAll(two);
two.add(one.get(0));

对于Java编译器的工作方式,您不必担心匿名创建变量,因为大多数编译器会将匿名引用转换为非匿名引用,至少从我的经验来看。

我正在尝试解决一个问题,如果可以将匿名对象的子集同时添加到两个列表中,这将非常有帮助。在这种情况下,给每一个都命名是不现实的。你说的匿名对象是什么意思?@BeepBeep:为什么给每一个都命名是不现实的?听起来你的代码应该重新设计,也许你上面给出的例子过于简单,无法向我们演示这个问题。如果您给我们一个更详细的例子,也许我们可以进一步帮助您,对象可以在循环中创建,或者以其他方式创建,以避免为每个对象创建新的变量名?编写一个名为AddToList的函数,它获取列表和对象的列表,并将对象添加到每个列表中。