Percorrendo coleções com Iterator
Percorrendo Coleções Como percorrer os elementos de uma coleção? Se for uma lista, podemos sempre utilizar um laço for, invocando o método get para cada elemento. Mas e se a coleção não permitir indexação? Por exemplo, um Set não possui um método para pegar o primeiro, o segundo ou o quinto elemento do conjunto, já que um conjunto não possui o conceito de “ordem” Podemos usar o enhanced-for (o “foreach”) para percorrer qualquer Collection sem nos preocupar com isso.
Percorrendo Coleções • Em que ordem os elementos serão acessados? Set<String> conjunto = new HashSet<String>(); conjunto.add("java"); conjunto.add("raptor"); conjunto.add("scala"); for (String palavra : conjunto) { System.out.println(palavra); } • Em que ordem os elementos serão acessados? Em um conjunto, a ordem depende da implementação da interface Set: você muitas vezes não vai saber ao certo em que ordem os objetos serão percorridos
Iterator Para navegar pelos objetos de uma coleção devemos utilizar o Iterator. O método iterator retorna uma estrutura que permite percorrer os elementos armazenados. Uma coleção pode ter vários Iterators.
Iterator Iterator permite a recuperação de todos os elementos da estrutura de dados sem se preocupar em como estes elementos estão armazenados
Percorrendo Coleções Toda coleção fornece acesso a um iterator, um objeto que implementa a interface Iterator, que conhece internamente a coleção e dá acesso a todos os seus elementos, como a figura baixo mostra.
Iterator A interface Iterator possui os métodos principais: hasNext() – verifica se ainda existem elementos; next() – retorna o próximo elemento. remove() – remove um elemento. 7 7
Percorrendo Coleções O método Collection iterator obtém um Iterator de uma Collection. O método Iterator hasNext determina se uma Collection contém mais elementos. Retorna true se houver outro elemento e, false, caso contrário. O método Iterator next retorna uma referência para o próximo elemento. O método Collection contains determina se uma Collection contém um elemento especificado. O método Iterator remove o elemento atual de uma Collection.
Percorrendo Coleções Primeiro criamos um Iterator que entra na coleção. A cada chamada do método next, o Iterator retorna o próximo objeto do conjunto. Um iterator pode ser obtido com o método iterator() de Collection, por exemplo: Set<String> conjunto = new HashSet<String>(); conjunto.add("item 1"); conjunto.add("item 2"); conjunto.add("item 3"); Iterator<String> i = conjunto.iterator(); while (i.hasNext()) { // recebe a palavra String palavra = i.next(); System.out.println(palavra); }
Iterator - Exemplo com LinkedList import java.util.*; public class ExemploLinkedList { public static void main(String[] args) { LinkedList v = new LinkedList(); for (int i = 0; i < 5; i++) { Integer valor = new Integer(i); v.add(valor); } v.add(new Integer(3)); v.add(new Integer(5)); Iterator it = v.iterator(); while (it.hasNext()) { Integer valores = (Integer)it.next(); System.out.println(valores.intValue()); } // vai imprimir 0,1,2,3,4,3,5 10
Percorrendo uma coleção de objetos simples Exemplo 1 Percorrendo uma coleção de objetos simples
A classe ObjetoQualquer public class ObjetoQualquer { private String nome; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome;
Exemplo completo import java.util.*; public class ExemploDeCollection { public static void main(String[] args) { /* * Essa é a sintaxe para criar uma coleção simples. */ Collection colecao = new ArrayList(); * Agora, vamos criar alguns objetos e fazer as atribuições. * ObjetoQualquer objeto1 = new ObjetoQualquer(); objeto1.setNome("Primeiro nome"); ObjetoQualquer objeto2 = new ObjetoQualquer(); objeto2.setNome("Segundo nome"); ObjetoQualquer objeto3 = new ObjetoQualquer(); objeto3.setNome("Terceiro nome");
Exemplo completo /* * O último passo é adicionar cada um dos objetos em nossa coleção. */ colecao.add(objeto1); colecao.add(objeto2); colecao.add(objeto3); * Para recuperar os objetos de uma coleção devemos utilizar um Iterator. * Veja o exemplo de sintaxe. * Observação: só existe a possibilidade de navegação para frente. Iterator iteColecao = colecao.iterator(); while (iteColecao.hasNext()) { //Conversão obrigatória. Atenção a esse detalhe!!! ObjetoQualquer objetoRecuperado = (ObjetoQualquer) iteColecao.next(); //Pronto, agora você pode utilizar o objeto que foi recuperado da maneira que quiser. System.out.println("Objeto recuperado: " + objetoRecuperado.getNome()); }
Navegando em uma lista de pessoas Exemplo 2 Navegando em uma lista de pessoas
A classe Pessoa public class Pessoa { private String nome; private String endereco; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; public String getEndereco() { return endereco; public void setEndereco(String endereco) { this.endereco = endereco;
FabricaDePessoas import java.util.*; public class FabricaDePessoas { public Collection getListaDePessoa() { Pessoa jose = new Pessoa(); jose.setNome("Jose"); jose.setEndereco("Algum Lugar"); Pessoa carlos = new Pessoa(); carlos.setNome("Carlos"); carlos.setEndereco("Outro Lugar"); Pessoa diego = new Pessoa(); diego.setNome("Diego"); diego.setEndereco("Sua Casa"); Collection lista = new ArrayList(); lista.add(diego); lista.add(jose); lista.add(carlos); return lista; }
ImprimeListaDePessoas package com.javabasico.collection; import java.util.*; public class ImprimeListaDePessoas { public static void main(String[] args) { 1. FabricaDePessoas fabrica = new FabricaDePessoas(); 2. Collection listaDePessoas = fabrica.getListaDePessoa(); 3. Iterator iteListaDePessoas = listaDePessoas.iterator(); 4. while (iteListaDePessoas.hasNext()) { 5. Pessoa pessoaRecuperada = (Pessoa) iteListaDePessoas.next(); 6. System.out.println(pessoaRecuperada.getNome()); 7. System.out.println(pessoaRecuperada.getEndereco()); }
ImprimeListaDePessoas Cria a nossa fábrica de objetos. Recupera a lista de pessoas da fábrica. Recupera o iterator para ler os objetos da coleção. Loop – iteração Recupera a próxima pessoa. Imprime o nome da pessoa. Imprime o endereço da pessoa.