2014-11-01 34 views
-2

如何將所有元素修改爲未知類型的列表?將所有元素修改爲未知類型的列表

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

但是這種結構每次都會產生新的人,我知道這是錯誤的。我想用迭代器更好,但是,我不知道我該怎麼做。請不要給我任何指向javadoc迭代器的鏈接。 確定,如果它的ArrayList我只需要做這樣

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

你是什麼意思一個未知類型的列表?你已經知道列表是'Person'的List。你想做什麼修改? – Khalid 2014-11-01 19:43:52

+0

你的問題很不清楚。 「未知類型的列表」是什麼意思?你的「這個建築每次創造新人」是什麼意思?請花一點時間爲您想要實現的目標提供更多背景,理想情況下使用簡短但完整的程序。 – 2014-11-01 19:43:56

+0

我的意思是我只知道名單,但我不知道它是以什麼爲基礎的。它mabe ArrayList或任何其他 – jenius 2014-11-01 19:45:55

回答

4

您可以輕鬆地通過接口List的方法set更換Person的改造實例(也就是每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返回一個新的實例方法。如果它只是修改所提供的實例,那麼你只需要遍歷列表:

for (Person person : persons) { 
    transformer.transform(person); //just modify the current "Person" instance 
} 
+0

非常感謝你。這正是我需要的 – jenius 2014-11-01 19:54:10

4

首先,你不能重新定義了Java爲(obj對象:對象)的元素循環。除非變換()改變Person對象的屬性,你必須通過使用其他施工迭代:

for (int i = 0; i < persons.size(); i++) { 
    // use persons.set() here to reassign the index in persons 
} 

而且,你通常不需要知道你到底是什麼樣的List獲得。像List這樣的接口背後的想法是,實現它的每個對象都可以在需要List的地方使用。它們的每個屬性和方法都是List接口中的屬性和方法的超集。

2

爲什麼不使用番石榴?

Collections2.transform(collection, new Function<Person, Person>() { 
     @Override 
     public Person apply(Person person) { 
      return transformer.transform(person); 
     } 
}); 

但是,它可能會更好,只是修改當前的個人實例。