2012-06-13 11 views
6

Ktoś wie, czy istnieje standardowy sposób tworzenia listy z instancji Iterator?Utworzenie listy <T> wystąpienie z Iterator <T>

+1

nie można utworzyć listę z Iterator, można utworzyć listę i Iterator nad jego elementami. – Sajmon

+0

Naprawdę nie ma sensu tworzenie "Listy" z 'Iteratora'. To jak tworzenie tablicy z tylko indeksu! – adarshr

+0

Jeśli twój iterator miał już swoją funkcję "next()", nigdy nie będziesz w stanie odzyskać poprzednich elementów. –

Odpowiedz

3

Użyj Iterator, aby uzyskać każdy element i dodać go do List.

List<String> list = new LinkedList<String>(); 

while(iter.hasNext()) { // iter is of type Iterator<String> 
    list.add(iter.next()); 
} 
+1

Dzięki, właśnie to zrobiłem, ale miałem nadzieję na jakąś magiczną metodę tam, aby mi pomóc :) – BillMan

+0

Jeśli chciałeś magicznych metod, powinieneś używać PHP;) – tskuzzy

+0

Jeśli potrzebujesz magicznych metod, powinieneś używać bibliotek innych firm. –

0

spróbować czegoś tak:

public T List<T> listFromIterator(Iterator<T> iterator) { 

List<T> result = new LinkedList<T>(); 
    while(iterator.hasNext()) { 
    result.add(iterator.next()); 
    } 

} 

Jedną rzeczą jest, aby pamiętać, że jeśli iterator nie jest na początku swojej struktury, nie ma sposobu pobierania poprzednie elementy.

Jeśli masz kolekcję, z której pochodzi iterator, możesz utworzyć listę przy użyciu konstruktora pobierającego kolekcję. ex: konstruktor LinkedList:

LinkedList(Collection<? extends E> c) 
0

ten sposób, że przekonwertować z listy do Iterator i vice versa.

ArrayList arrayList = new ArrayList(); 
// add elements to the array list 
arrayList.add("C"); 
arrayList.add("A"); 
arrayList.add("E"); 
arrayList.add("B"); 
arrayList.add("D"); 
arrayList.add("F"); 

// use iterator to display contents of arrayList 
System.out.print("Original contents of arrayList: "); 
Iterator iterator = arrayList.iterator(); 
ArrayList arrayList2 = new ArrayList(); 

while(iterator.hasNext()) { 

    Object element = iterator.next(); 
    arrayList2.add(element); 
    System.out.print(element + " "); 

} 
Powiązane problemy