2012-12-08 7 views
10

Mam przypadek użycia, gdy trzeba iteracyjne nad Vector elementów i przechowywać wyniki w tablicy tylko powiedzieć, że jeśli jest instancja klasy methodJak iterować nad wektor w Java i przechowywać tylko określonej klasy?

Czy istnieją proste to zrobić?

Obecnie robię w ten sposób:

Iterator itr = vec.iterator(); 
    Iterator element = vec.iterator(); 

    while(itr.hasNext()) 
    { 
     boolean method = itr.next() instanceof Method; 
     if(method) 
      System.out.println("\t" + ((Method)(element.next())).name); 
     else 
      element.next(); 
    } 

Ale myślę, że nie będzie jakiś lepszy sposób niż ten.

+2

swoją wartość logiczną 'method' i klasa o nazwie' method' jest bardzo myląca. Nazwy klas powinny ** zawsze ** zaczynać się od wielkich liter. –

+0

"Metoda" jest sprzeczne rzeczy –

+0

Jaki jest problem z tym podejściem? Nie znajdziesz innej drogi bez korzystania z zewnętrznej biblioteki, takiej jak Guava. (Uwaga: część else powinna zostać usunięta). –

Odpowiedz

16

Załóżmy, że masz klasę Method, wówczas kod może być coś takiego:

List<Method> list = new ArrayList<Method>(); 
    for (Object obj : vector) { 
     if (obj instanceof Method) { 
      list.add(obj); 
     } 
    } 
4

nie chodziło o iteracji ten wektor bez synchronizacji ktoś?

Jeśli vector nie jest ograniczony do wątku, w obecności innego wątku modyfikującego jego zawartość, każda iteracja może rzucić ConcurrentModificationException.

0

W Javie 8, można wywołać metodę .stream() która zwraca strumień elementów wektorów, więc przechowywania elementów, na przykład w wykazie, mogą być wykonywane przez wywołanie kolektora

Vector<String> vec = new Vector<>(); 
vec.add("hello"); 
vec.add("world"); 

List<String> list = vec.stream().collect(Collectors.toList()); 
Powiązane problemy