Ajuda com 'iterator'

16 respostas
D

Opa :smiley:

Tenho um método de get no meu vo que retorna uma stringbuffer, mas eu não to conseguindo preencher a stringbuffer.

public StringBuffer getCampos(){
		StringBuffer campos = null;
		iterator = getRegistros().iterator();
		registro = (Registro)iterator.next();
		Iterator it = registro.getCampos().iterator();
		while(it.hasNext()) {
			campos.append((String) it.next());
		}
		return campos;
	}

Eu dou um display no meu iterator e ele me retorna esse objeto - AbstractList$Itr@2db19d.

Eu vejo o que tem dentro dele e na posição 0, tem o Registro com os atributos dele. O que eu to fazendo de errado e recebo o erro:

[]'s

16 Respostas

LPJava

dessa forma vc está imprimindo o valor do objeto… é interassente que seu Iterator seja de um tipo… facilita…

Iterator<Dog> it = obj.iterator();
while(it.hasNext()){
Dog d = it.next();
System.out.println(d.nome);
System.out.println(d);// isso imprime o valor do objeto
}

flw!!

D

eu uso java 1.4 aqui na empresa… :frowning:

LPJava

opa!! usa a conversao explicita entao…

D

como que eu faço?

eu to usando cast…como que fica com a conversão explicita?

Mantu

Olá, davidpadilha!
Pra você estar recebendo aquela exceção de NoSuchElementException, provavelmente o método getRegistros deve estar te retornando uma lista vazia. Dê uma conferida nisso, incluindo o seguinte trecho no seu código.

public StringBuffer getCampos(){
 		StringBuffer campos = null;
 		iterator = getRegistros().iterator();
		if(!iterator.hasNext()){
			javax.swing.JOptionPane.showMessageDialog(null, "Nenhum registro encontrado!!! \nRetornando null...");
			return null;
		}
 		registro = (Registro)iterator.next();
 		Iterator it = registro.getCampos().iterator();
 		while(it.hasNext()) {
 			campos.append((String) it.next());
 		}
 		return campos;
 	}

Agora, quanto ao NullPointer, eu poderia apostar que é porque o você esqueceu de instanciar o StringBuffer campos… Troque a linha (a primeira do método) StringBuffer campos = null por StringBuffer campos = new StringBuffer()
Creio que isso te de uma ajuda.
Divirta-se!

ramilani12

Vc não precisa de mais um while?

public StringBuffer getCampos()
{
 		StringBuffer campos = null;
 		iterator = getRegistros().iterator();
 		while (iterator.hasNext())
             { 
                 registro = (Registro)iterator.next();
 		
                Iterator it = registro.getCampos().iterator();
 		
                 while(it.hasNext()) {
 			campos.append((String) it.next());
 		}
 	   }	
return campos;
 	}

Talvez o iterator getRegistros não esta lhe retornando objetos , em sim uma lista vazia
No momento do Cast lhe retorna nullpointerexception prq não há nenhum obejto na lista …

Mantu

davidpadilha:
como que eu faço?

eu to usando cast…como que fica com a conversão explicita?


Não precisa dar cast de nada, neste seu caso. O método append da classe StringBuffer tem sobrecargas para qualquer tipo de dados. Você pode simplesmente “entuchar” qualquer coisa lá que funciona :lol:.

D

eu mudei para:

public StringBuffer getCampos(){
		StringBuffer campos = null;
		iterator = getRegistros().iterator();
		while(iterator.hasNext()) {
			registro = (Registro)iterator.next();
			Iterator it = registro.getCampos().iterator();
			while(it.hasNext()) {
				campos.append((String)it.next());
			}
			
		}
		return campos;
	}

E estou recebendo nullpointer…tem algo errado no código??

Mantu

Como eu disse antes:

D

Mantu:
Olá, davidpadilha!
Pra você estar recebendo aquela exceção de NoSuchElementException, provavelmente o método getRegistros deve estar te retornando uma lista vazia. Dê uma conferida nisso, incluindo o seguinte trecho no seu código.

public StringBuffer getCampos(){
 		StringBuffer campos = null;
 		iterator = getRegistros().iterator();
		if(!iterator.hasNext()){
			javax.swing.JOptionPane.showMessageDialog(null, "Nenhum registro encontrado!!! \nRetornando null...");
			return null;
		}
 		registro = (Registro)iterator.next();
 		Iterator it = registro.getCampos().iterator();
 		while(it.hasNext()) {
 			campos.append((String) it.next());
 		}
 		return campos;
 	}

Agora, quanto ao NullPointer, eu poderia apostar que é porque o você esqueceu de instanciar o StringBuffer campos… Troque a linha (a primeira do método) StringBuffer campos = null por StringBuffer campos = new StringBuffer
Creio que isso te de uma ajuda.
Divirta-se!

Resolvido!

Era isso mantu! Faltava inicializar o StringBuffer ( que vacilo hehe )

Vlw todo mundo que ajudou :slight_smile:

LPJava

Iterator é diferente de iterator…

Mantu

:?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:

LPJava

:?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:

Iterator é diferente de iterator()… ou nao? segundo a kathy iterator() é um metodo… que pertence a class Iterator…

import java.util.HashSet;
import java.util.Iterator;
class SetHash{
	public static void main(String args[]){
		HashSet<Integer> h = new HashSet<Integer>();
			h.add(20);
			h.add(10);
			h.add(20);
			
			Iterator<Integer>it=h.iterator();
			while(it.hasNext()){
				Integer in=it.next();
			System.out.println(in);}		
	}
}
ramilani12

Talvez o erro nao esteja no seu metodo mas sim o retorno do metoto ele pode estar retornando null para StringBuffer caso nao ha nenhum elemento na lista

ramilani12

Claro , java é case sensitive …

Mantu

:?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:

Iterator é diferente de iterator()… ou nao? segundo a kathy iterator() é um metodo… que pertence a class Iterator…

import java.util.HashSet;
import java.util.Iterator;
class SetHash{
	public static void main(String args[]){
		HashSet<Integer> h = new HashSet<Integer>();
			h.add(20);
			h.add(10);
			h.add(20);
			
			Iterator<Integer>it=h.iterator();
			while(it.hasNext()){
				Integer in=it.next();
			System.out.println(in);}		
	}
}


Isso eu sei. Só não entendi qual a relevância disso pra dúvida do OP, :lol:

Criado 2 de abril de 2007
Ultima resposta 2 de abr. de 2007
Respostas 16
Participantes 4