如何将所有元素修改为未知类型的列表?
for (Person person : persons) {
person = transformer.transform(person);
}
但这种结构每次创造新人,我知道这是错误的。而且我想最好使用迭代器,但是我不知道我该怎么做。请不要给我任何javadoc迭代器的链接。 好的如果它是ArrayList我只需要这样做
for (int i = 0 ; i < persons.size ; i++) {
persons[i] = transformer.transform(persons[i]);
}
答案 0 :(得分:4)
您可以使用接口Person
的方法set轻松替换List
的转换后的实例(这意味着每个List
实现,如ArrayList
或LinkedList
支持:)
for (int i = 0; i < persons.size(); i++) {
final Person person = persons.get(i);
persons.set(i, transformer.transform(person)); // replace new instance of "Person"
// do other stuff with "person"
}
请注意,只有方法set
返回transform
的新实例时,才需要使用Person
。如果它只是修改提供的实例,那么您只需要遍历列表:
for (Person person : persons) {
transformer.transform(person); //just modify the current "Person" instance
}
答案 1 :(得分:4)
首先,您无法重新定义Java for(object obj:objects)循环的元素。除非transform()改变Person对象的属性,否则你必须迭代使用另一个进行构造:
for (int i = 0; i < persons.size(); i++) {
// use persons.set() here to reassign the index in persons
}
此外,您通常不需要确切知道您正在获得的List
类型。像List这样的接口背后的想法是,每个实现它的对象都可以在调用List的地方使用。它们的每个属性和方法都是List接口中的属性和方法的超集。
答案 2 :(得分:2)
为什么不使用番石榴?
Collections2.transform(collection, new Function<Person, Person>() {
@Override
public Person apply(Person person) {
return transformer.transform(person);
}
});
但是修改当前的Person实例可能会更好。