我正在尝试循环列表,该列表中有4个数组,每个数组都有7个值
我正在循环列表,然后当我从列表中获取一个数组时,因为我知道有多少值有数组我分配每个数组索引如下:personObject.setName(String.valueOf(myArray[0])
然后在while循环结束时我将PersonObject添加到人员列表中:listOfPersons.add(personObject)。
我的问题是我的列表只填充了相同的对象,我知道我循环的列表中的4个数组有不同的值,这是我的代码:
ArrayList<Object> objectList= null;
objectList= _serviceVariable.getObjects(); <--- this works it returns a list with 4 arrays all with diferent values
Person myPerson = new Person();
List<Person> personsList = new List<Person>;
Iterator<Object> itr = objectList.iterator();
while(itr.hasNext())
{
Object[] innerObj = (Object[]) itr.next();
myPerson.setName(String.valueOf(innerObj [0])
myPerson.setLastName(String.valueOf(innerObj [1])
myPerson.setNickName(String.valueOf(innerObj [2])
personsList.add(myPerson);
}
当我打印我的人名单时,列表中的人名相同,名字,姓名和昵称是一个列表,其中包含相同值的相同对象。
答案 0 :(得分:3)
每次添加Person
时,您想要添加不同的人吗?
因此,您应该每次在循环中创建一个 new
Person
对象。
不要只创建一个循环外部的数据,你只是不断变化。
// NOT HERE Person myPerson = new Person();
// ...
while(itr.hasNext()) {
Object[] innerObj = (Object[]) itr.next();
Person myPerson = new Person(); // HERE you create a new Person
myPerson.setName(String.valueOf(myArray[0]);
myPerson.setLastName(String.valueOf(myArray[1]);
myPerson.setNickName(String.valueOf(myArray[2]);
personsList.add(myPerson); // add the new person to the list
}
答案 1 :(得分:2)
您正在多次向循环添加(并修改)同一个对象实例,因为您只创建了一个Person
实例,将其移动到循环中。
// Person myPerson = new Person();
// ...
while(itr.hasNext()) {
Person myPerson = new Person(); // <-- HERE!
Object[] innerObj = (Object[]) itr.next();
myPerson.setName(String.valueOf(myArray[0])
myPerson.setLastName(String.valueOf(myArray[1])
myPerson.setNickName(String.valueOf(myArray[2])
personsList.add(myPerson);
}
您将创建多个实例并将它们添加到循环中。
答案 2 :(得分:0)
在审核您的代码之后,我会看到它
您没有从相关数组中读取数据,即innerObj
。
替换myArray[0]
,它应该是 innerObj [0] 和
内部循环Person p = new Person()
设置新值,否则将覆盖。
while(itr.hasNext()) {
Person p= new Person(); // <-- HERE!
Object[] innerObj = (Object[]) itr.next();
p.setName(String.valueOf(innerObj [0])
p.setLastName(String.valueOf(innerObj [1])
p.setNickName(String.valueOf(innerObj [2])
personsList.add(p);
}
答案 3 :(得分:0)
public class Foobar {
class Person {
String name;
Person(String name) {
this.name = name;
}
}
class SpecialPerson extends Person {
SpecialPerson(String name) {
super(name);
}
}
public void myFoobar() {
List<List<Person>> ListOfPersonsList = new ArrayList<List<Person>>();
List<Person> persons1 = new ArrayList<Person>();
persons1.add(new Person("Foo"));
List<Person> persons2 = new ArrayList<Person>();
persons2.add(new Person("Bar"));
ListOfPersonsList.add(persons1);
ListOfPersonsList.add(persons2);
List<SpecialPerson> specials = new ArrayList<SpecialPerson>();
for (List<Person> persons : objectList) {
for (Person person : persons) {
specials.add(new SpecialPerson(person.name));
}
}
for (SpecialPerson special : specials) {
System.out.println("Name: " + special.name);
}
}
}