Dúvida sobre Iterators

Olá!

Tenho uma dúvida sobre a utilização de Iterators: criei um ArrayList, e um iterator deste ArrayList.
Para pegar os itens da lista, devo usar o método next do iterator, certo? Após usar o next, o iterator fica na primeira posição da lista, e usando novamente o next, consigo pegar o próximo item da lista.
Mas como eu faria para pegar o item que está na posição atual do iterator? Por exemplo, dei um next, e agora estou no segundo item da lista e preciso acessá-lo novamente, sem ir para o próximo.

Guarde esse item numa variável. E não use o next novamente.
Por exemplo:

public void excluiItensPorTipo(List<Item> itens) {
   Iterator<Item> it = itens.iterator();
   while (it.hasNext) {
      Item item = it.next();
      if (item.getTipo() == tipoAExcluir) {
           it.remove();
           System.out.println("Excluído: " + item.getDescricao());
      }
   }
}

Note que a variável item foi usada 3 vezes.

Não dá ^^.

Por isso você tem que guardar o Objeto retornado (no .next() ).

ops… tava digitando na hora… rs, bem… é isso ai. :stuck_out_tongue: haha

Só lembrando que no caso de uma iteração simples (sem exclusão) é melhor usar o for each:

for (Item item : listaDeItens) {
    System.out.print("Descrição: " + item.getDescricao());
    System.out.println(" Preço: " + item.getPreco());
}

Esse é de longe o caso mais comum. E fica mais limpo do que:

Iterator it = listaDeItens.iterator(); while (it.hasNext()) { Item item = it.next(); System.out.print("Descrição: " + item.getDescricao()); System.out.println(" Preço: " + item.getPreco()); }

Valew galera! :wink:
Mas é exatamente isso que eu não queria fazer…

Meu problema é que eu tenho uma classe com um método que devolve o próximo item da lista, usando o método next do iterator. Eu precisava criar um outro método, que acessaria o item que foi devolvido pelo next do método anterior (não sei se ficou confuso, mas foi o melhor que eu consegui explicar), e achei que seria desperdício de memória criar outro objeto na memória só para guardar esse valor…

Você não vai criar outro objeto, só outra referência ao objeto retornado. Isso significa… 4 bytes.
Sua máquina é tão restrita em memória assim!?!?!?

Hahahaha! Acho que a minha máquina agënta mais 4b sem ficar muito pesada sim! :smiley:
Mas já implementei a solução usando uma outra referencia para guardar o objeto retornado pelo iterator!
Mais umas vez, vallew galera!!!
:wink: