*Declaração do Iterator

9 respostas
javaEd.com

Bom dia galera!

Estou fazendo um teste aqui com Collections, e gostaria de fazer um simples validador de números ímpares ...

tenho uma variável dados = {0,1,2,3,4,5,6,7,8,9}

E usando o Iterator, gostaria de exibir somente os ímpares, minha dúvida é em relação a declaração dessa variável usando o Iterator!

Tenho um método assim:
public static void exibeImpar(Collection<Iterator> dados) {

	}

Gostaria de saber se está certo esse parâmetro do método, ou se deveria usar Collection dados, e gostaria de esclarecer minha dúvida principal, a declaração desses números : Iterator dados = new Iterator();, sei que está errado, e não encontro um jeito de declarar da maneira correta!

Essa é minha dúvida, valeu rapaziada!

9 Respostas

T

O código não está pronto, mas você não pode confundir um Iterator (que serve para percorrer uma coleção) com o dado em si (que neste caso é um Integer).

public static void exibeImpar(Collection<Integer> dados) {
    for (Iterator<Integer> it = dados.iterator(); it.hasNext(); ) {
        Integer value = it.next();
        System.out.println (value);
    }
}
T

Um Iterator não pode ser criado do “vazio”, já que ele é só uma interface, e como você deve saber, não é possível efetuar “new” em uma interface, só em uma classe que implementa essa interface.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Iterator.html

javaEd.com

[b]Thingol, vamos la …

toda Collection na parametrização<?> devo colocar então o TIPO que será usado, String, Integer, Double, etc …

Assim como classes abstratas, interfaces não se pode instaciar (usa new), ok!

vc me esclareceu que não pode se criar o Iterator do “vazio”, ae vem minha dúvida, como eu inicializo essa minha variável dados, com os valores 0,1,2,3,4,5,6,7,8,9 apenas para testar os ímpares desse conjunto?[/b]

valeu!!!

T

Collection também é uma interface. Há várias classes que implementam essa interface. Vamos dar um exemplo:

Collection<Integer> dados= new ArrayList<Integer>();
dados.add (Integer.valueOf (0));
dados.add (Integer.valueOf (1));
...
dados.add (Integer.valueOf (9));
...
exibeImpar(dados);
javaEd.com

[b]Legal essa forma de adicionar os números, mas eu quero saber mesmo se assim como em array, eu posso declarar algo do tipo:

int[] dados = {0,1,2,3,4,5,6,7,9};

manja?

Se usando Collection, tenho essa possibilidade de declarar dessa forma, tipo

Collection<Integer> dados = {0,1,2,3,4,5,6,7,8,9};
Sei que dá erro, mas existe alguma forma de eu inicializar os valores!!?!!??

obrigado[/b]

T
import java.util.*;

class TesteCollections {
    public static void main(String[] args) {
        Collection<Integer> ints = Arrays.asList (new Integer[] {0,1,2,3,4,5,6,7,8,9});
        System.out.println (ints);
    }
}
javaEd.com

Caro thingol,

Cheguei ao resultado que queria, agradeço, mas ainda querendo absorver mais informação, segue perguntas :

Collection dados = Arrays.asList(new Integer[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
O que seria esse Arrays.asList, seria algo como definir de que tipo eu quero meu array?E se existe alguma maneira diferente de inicializar esses valores do jeito que você fez?

Nessa lógica :
if (impar.next() % 2 == 0) {
    System.out.print(" - " + impar.next());
}

Debugando vi que ele imprimi os valores ímpares baseado no 'cursor' do impar mesmo com a lógica num mod 2 igual a 0, que seria no caso para verificar os pares!Sabe pq isso acontece?

Segue o código completo

import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

public class TesteCollection {

	public static void main(String[] args) {

		Collection<Integer> dados = Arrays.asList(new Integer[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
		TesteCollection.exibeImpar(dados);
	}

	public static void exibeImpar(Collection<Integer> dados) {

		Iterator<Integer> impar = dados.iterator();

		while (impar.hasNext()) {

			if (impar.next() % 2 == 0) {
				System.out.print(" - " + impar.next());
			}

		}

	}

}

No mais mto obrigado pelas dicas, e espero que tenha essas respostas pra esclarecer ainda mais sobre Collections

valeu thingol :)

T

Cada vez que você chama “next”, ele avança para o próximo valor. O correto é você chamar “next()” apenas uma vez por iteração, e guardar o valor retornado em uma variável.

import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

public class TesteCollection {

	public static void main(String[] args) {

		Collection<Integer> dados = Arrays.asList(new Integer[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
		TesteCollection.exibeImpar(dados);
	}

	public static void exibeImpar(Collection<Integer> dados) {

		Iterator<Integer> impar = dados.iterator();

		while (impar.hasNext()) {
                        Integer valor = impar.next();
			if (valor % 2 == 1) {
				System.out.print(" - " + valor);
			}

		}

	}

}
javaEd.com

[b]Valeu thingol,

Está entendido e resolvido já …

até mais
[]'s[/b]

Criado 2 de setembro de 2008
Ultima resposta 3 de set. de 2008
Respostas 9
Participantes 2