Como acessar os variaveis de um objeto armazenado num Vector

7 respostas
G

Pessoal,
Precisei criar uma classe interna que contem duas variaveis. Decidi então instanciar um objeto dessa classe, atribuir valores e ir armazenando num Vector.
As variáveis dessa classe interna são um (int) id e um (String) texto. Ou seja, o id está relacionado com o texto, em cada posicão do Vector.

Agora eu nao consigo comparar um novoId recebido com o id de dentro do Vector. Não consigo acessar a estrutura do Vector e comparar.

em C seria:
If ( vetor.estrutura.id == novoId )
...
Mas e em Java?

Outra:
Supondo que se consiga essa comparação, como pegar o texto (String) associado a esse id ?

Espero ter sido claro,

Obrigado a todos,

Glauco.

private StoredData dados = new StoredData();
                private Vector vdados = new Vector();
                dados.textLoaded = text ; // text recebido
                dados.idText = ++idTextoOnServer; // novo id recebido
                vdados.add(dados);


                private class StoredData{
		
                     private String textLoaded ;
                     private long idText;
	}

7 Respostas

javaBeats
StoredData sd = vdados.getElementAt( 0 );
System.err.println( sd.getTexto() );

Há várias maneiras possíveis, e muito melhores que esta, é só brincar um pouco com Collections que você pega o jeito.

M

Se eu entendi direito, a primeira coisa que eu faria seria encapsular os atributos da classe StoredData:

private String textLoaded ;
private long idText;

public String getTextLoaded() {
  return textLoaded;
}
public void setTextLoaded(String textLoaded) {
  this.textLoaded = textLoaded;
}	
public long getIdText() {
  return idText;
}
public void setIdText(long idText) {
  this.idText = idText;
}

Depois, basta criar os objetos e acessá-los via um enhanced for:

long idTextoOnServer = 0;
long novoId = 0;
		
StoredData dados = new StoredData();
Vector<StoredData> vdados = new Vector<StoredData>();
	  		
dados.setTextLoaded("Novo texto!");
dados.setIdText(++idTextoOnServer);
vdados.add(dados);
        
for (StoredData data : vdados) {
  if( data.getIdText() == novoId){
    // TODO
  }
}

Falow!

G

valeu mtosatti, mas vc poderia me explicar o que significa esse operador : quando vc usa

StoredData data : vdados

obrigado,

Glauco.

javaBeats

Este ‘for’ é o chamado ‘for each’, pois faz a iteração entre todos os elementos do vetor, na ordem em que eles se apresentam. Serve para diversas collections, e também vetores.

Lê-se “para cada StoredData em vdados…”

Rodrigo

G

Obrigado pela dica Rodrigo.

StoredData dados = new StoredData();

for (StoredData data : vdados) {
if( data.getIdText() == novoId){

// nao seria StoredData dados : vdados …?

outra pergunta: como eu faço pra remover o elemento desse vector que é igual a novoId?
(remover o objeto).

Obrigado!

dudaskank

Para isso, esse for acho que não serve, você vai precisar usar um iterador. Recomendo dar uma olhada no tutorial de collections aqui

flw

javaBeats

Isso mesmo, para remover durante a iteração, só usando Iterator mesmo, através do método remove().

Iterator &lt; StoredData &gt; it = vados.iterator(); // ou outro método q retorne iterator
while ( it.hasNext() ) {
  StoredData sd = it.next();
  sd.fazAlgumaCoisaComOObjeto();
  it.remove();
};

Vale lembar que o "enhanced for" só serve para Collections de tipo definido, e vetores. Se a Collection não tiver o tipo definido com generics, vc ainda pode usar o for each, mas vai ter de referenciar cada objeto como sendo do tipo Object.

Rodrigo

Criado 18 de julho de 2006
Ultima resposta 18 de jul. de 2006
Respostas 7
Participantes 4