Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Iterator - Consultar o mesmo objeto mais vezes

Além do nome, tentei imprimir também a idade, mas me retornou uma bela de uma exception rsrs

       Funcionario f1 = new Funcionario("Barney" , 12);
        Funcionario f2 = new Funcionario("Jonatan" , 9);
        Funcionario f3 = new Funcionario("Guaraciara" , 13);
...
while(iterador.hasNext()) {
            System.out.println(iterador.next().getNome() + ", " + iterador.next().getIdade() + " anos");
        }
Jonatan, 12 anos
Exception in thread "main" java.util.NoSuchElementException
    at java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1209)
    at java.util.TreeMap$KeyIterator.next(TreeMap.java:1265)
    at br.com.alura.TesteFuncionario.main(TesteFuncionario.java:25)

Isso pq rodou usando o next() no iterador e acabou pulando os objetos. Neste caso, tentei fazer uma maneira e deu certo:

while(iterador.hasNext()) {
            Funcionario current = iterador.next();
            System.out.println(current.getNome() + ", " + current.getIdade() + " anos");
}

Existiria alguma outra maneira para executar o objeto atual no iterator?

2 respostas
solução!

Raphael, dei uma olhada nos métodos disponíveis e me parece que não há nenhum que permita você faça isso sem precisar criar uma referência para o objeto obtido com o next() (mas posso estar errado, é bom dar uma olhada na documentação também).

Porém, de qualquer forma, acho que nesse caso seria mais vantajoso utilizar um foreach ou lambda mesmo, já que ele já permitirá que você faça a mesma coisa com uma sintaxe mais simples.

Você já deve ter visto no curso, mas com o forEach simples ficaria assim

for (Funcionario funcionario : funcionarios) {
            System.out.println(funcionario.getNome() + ", " + funcionario.getIdade() + " anos");
        }

E com Lambda ficaria assim

funcionarios.forEach((funcionario)->System.out.println(funcionario.getNome() + ", " + funcionario.getIdade() + " anos"));

Obrigado Giovanne!

Pois é, era mais uma curiosidade mesmo para ver se tinha esse método. E sim, tanto o foreach quanto o lambda são mais vantajosos neste caso.

Valeu!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software