O que é a interface Iterable utilizado?
Pergunta
Eu sou um novato e eu não consigo entender o efeito real da interface Iterable
.
Solução
Além do que Jeremy disse, a sua principal vantagem é que ele tem o seu próprio pouco de açúcar sintático: o reforçada loop for . Se você tem, digamos, um Iterable<String>
, você pode fazer:
for (String str : myIterable) {
...
}
Nice e fácil, não é? Todo o trabalho sujo de criar a Iterator<String>
, verificando se ele hasNext()
, e chamando str = getNext()
é tratado nos bastidores pelo compilador.
E uma vez que a maioria das coleções quer implementar Iterable
ou ter uma visão que retorna um (como Map
ou keySet()
de values()
), isso faz com que trabalhar com coleções muito mais fácil.
O Iterable
Javadoc dá uma completa lista de classes que implementam Iterable
.
Outras dicas
Se você tem um conjunto de dados complicado, como uma árvore ou uma fila helicoidal (sim, eu só inventei isso), mas você não se importam como está estruturada internamente, você só quer Pega todos os elementos, um por um, você obtê-lo para retornar um iterador.
O objeto complexo em questão, seja ele uma árvore ou uma fila ou uma implementos WombleBasket Iterable, e pode retornar um objeto iterador que você pode consultar usando os métodos Iterator.
Dessa forma, você pode simplesmente pedir-lo se ele hasNext()
, e se isso acontecer, você obter o item next()
, sem se preocupar onde obtê-lo a partir da árvore ou onde quer.
Ele retorna um java.util.Iterator
. É usado principalmente para ser capaz de usar o tipo de aplicação no loop for aprimorado
List<Item> list = ...
for (Item i:list) {
// use i
}
Sob o capô o compilador chama o list.iterator()
e repete-lo dando-lhe a i
dentro do loop for.
Uma interface é na sua essência uma lista de métodos que uma classe deve implementar. A interface iterable é muito simples - não é apenas um método para implementar: Iterator()
. Quando uma classe implementa a interface Iterable
, ele está dizendo a outras classes que você pode obter um objeto Iterator
ao uso para iterar sobre (ou seja, transversal) os dados no objeto.
Iterators basicamente permitir a iteração sobre toda a coleção.
É também o que é necessário para usar o Java for-each instrução de controle.