将所有元素修改为未知类型的列表

时间:2014-11-01 19:41:14

标签: java list iterator updates

如何将所有元素修改为未知类型的列表?

for (Person person : persons) {
            person = transformer.transform(person);
        }

但这种结构每次创造新人,我知道这是错误的。而且我想最好使用迭代器,但是我不知道我该怎么做。请不要给我任何javadoc迭代器的链接。 好的如果它是ArrayList我只需要这样做

 for (int i = 0 ; i < persons.size ; i++) {
                persons[i] = transformer.transform(persons[i]);
            }

3 个答案:

答案 0 :(得分:4)

您可以使用接口Person的方法set轻松替换List的转换后的实例(这意味着每个List实现,如ArrayListLinkedList支持:)

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实例可能会更好。