2012-03-16 17 views
23

Jak mogę uzyskać java.lang.Iterable z kolekcji takiej jak Set lub List? Dzięki!Kolekcja do Iterable

+2

Masz na myśli 'Iterator' zamiast' Iterable'? 'List' implementuje interfejs' Iterable'. 'Iterator' pozwala na iterację poprzez elementy' List'. – nwinkler

+0

Mój interfejs jest rzeczywiście posortowany w zestawie – myborobudur

Odpowiedz

42

Kolekcja jest iterowalny ... Więc można napisać:

public static void main(String args[]) { 
    List<String> list = new ArrayList<String>(); 
    list.add("a string"); 

    Iterable<String> iterable = list; 
    for (String s : iterable) { 
     System.out.println(s); 
    } 
} 
+1

Wiem, że OP o to pytał, ale przypisanie do "Iterable" jest całkowicie niepotrzebne. – nwinkler

+0

@nwinkler zgodził się z Twoim komentarzem. – assylias

+0

Dzięki, to był ogólny problem – myborobudur

6

To nie jest dla mnie jasne, co trzeba, więc:

to dostaje iterator

SortedSet<String> sortedSet = new TreeSet<String>(); 
Iterator<String> iterator = sortedSet.iterator(); 

Zestawy i listy to Iterables, dlatego można wykonać następujące czynności:

SortedSet<String> sortedSet = new TreeSet<String>(); 
Iterable<String> iterable = (Iterable<String>)sortedSet; 
+0

OP prosi o "Iterable" nie jako "Iterator" – amit

+0

Dzięki, to był ogólny problem – myborobudur

5

Iterable jest bardzo interfejs Collection tak dowolnej klasy (takie jak Set lub List), który realizuje Collection realizuje również Iterable.

+0

Dzięki, to był ogólny problem – myborobudur

1

java.util.Collection Przedłuża java.lang.Iterable, nie musisz nic robić, to już jest Iterable.

groovy:000> mylist = [1,2,3] 
===> [1, 2, 3] 
groovy:000> mylist.class 
===> class java.util.ArrayList 
groovy:000> mylist instanceof Iterable 
===> true 
groovy:000> def doStuffWithIterable(Iterable i) { 
groovy:001> def iterator = i.iterator() 
groovy:002> while (iterator.hasNext()) { 
groovy:003>  println iterator.next() 
groovy:004> } 
groovy:005> } 
===> true 
groovy:000> doStuffWithIterable(mylist) 
1 
2 
3 
===> null