Criei um objeto qq, digamos Pessoa. Quero preencher um Vector (Ou ArrayList) com objetos do tipo Pessoa. Como faço para percorrer os elementos do Vector (ou ArrayList) com Iterator e recuperar propriedades/ chamar métodos de cada Pessoa?
Outra pergunta: o método contains leva em conta a referencia dos objetos ou o que eu definir se sobrescrever o equals?
o método contains vai olhar o método equals. Por default o equals() compara a referencia do objeto.
Pessoa p = new Pessoa("Ricardo");
Pessoa p2 = new Pessoa("Ricardo");
List l = new ArrayList();
l.add(p);
System.out.println(l.contains(p)); // imprime true(mesma referencia)
System.out.println(l.contains(p2)); // imprime false
Para a segunda linha imprimir true precisa sobrescrever o equals/hashcode.
[quote=“rlicciardo”]Como faço para percorrer os elementos do Vector (ou ArrayList) com Iterator e recuperar propriedades/ chamar métodos de cada Pessoa?
[/quote]
Assim:
import java.util.*;
(...)
for(Iterator it=suaColecao.iterator(); it.hasNext();){
Pessoa p = (Pessoa) it.next();
p.metodo1();
p.metodo2();
}
(...)
Neste exemplo que vc deu, eu sempre obtenho um ClassCastException, alguma idéia?
ArrayList x = a.getArquivos();
for (Iterator i = x.iterator();i.hasNext() ; ){
Arquivo z = (Arquivo) i.next();
System.out.println("Resultado " + z.getNome());}
O método getArquivos() do Objeto “a” retorna um ArrayList de “Arquivos”
Você tem certeza que não está inserindo nenhum objeto em seu ArrayList que não é da sua classe Arquivo?
Certeza absoluta!!! :roll:
Sobrescreva o método toString de Arquivo e teste isso:
ArrayList x = a.getArquivos();
for (Iterator i = x.iterator();i.hasNext() ; ){
Object z = i.next();
System.out.println(z);
}
A ClassCastException é lançada obviamente quando se tenta fazer uma conversão inválida. Se você tem certeza que não inseriu outro objeto que não é da classe Arquivo, certamente está tentando fazer uma coerção errada em algum outro lugar. Qq coisa, posta aí as mensagens de erro. :?
Também tive este problema com ClassCastException, mas era BEM bizarro, e só ocorria ao tentar fazer a iteração com um iterator.
Ao pegar o className na iteração eu recebia Proxy#:NomeRealdaClasse
Mas ao fazer, por exemplo, ArrayList.get( 1 ).className() eu recebia NomeRealdaClasse.
Bizarro
List arqs = new ArrayList();
List dirs = new ArrayList();
[quote] File[] files = f.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()){
arqs.add(files[i]);
}
else{
dirs.add(new Diretorio (files[i]));
}
}
[/quote]
Então, eu criei o ArrayList e o preenchi com objetos do tipo File.
Não consigo recuperar! Alguma idéia?
O que significa “Nao consigo recuperar”? Que tipo de problema voce esta tendo?
Rafael
Eu quero acessar um File individualmente, ou listar os arquivos. Não es´tou conseguindo
Como eh o codigo que vc fez e que nao esta funcionando?
Rafael
[code]
public void listaArquivos(){
//Iterator i = arqs.iterator() ;
//while (i.hasNext())
//System.out.println(i.next().toString() );
for (int i=0; i < arqs.size() ; i++)
System.out.println(arqs.get(i));
}
De nenhu jeito rolou[/code]
Qual o Output disto?
rlicciardo, de mais informacoes a respeito do problema, como resultado que vc espera, o resultado obtido, o que voce nao compreende etc… A bola de cristal nos ajuda muitas vezes, mas nao faz milagres :shock:
Rafael
Pessoal, algo está muito estranho:
File[] arqs;
public Diretorio(File f){
arqs = f.listFiles();
for (int i = 0; i < arqs.length; i++) {
if (arqs[i].isFile()){
System.out.println("Adicionou o arquivo " + arqs[i].getName() );}
else{
System.out.println("Adicionou o diretorio " + arqs[i].getName());}
}
}
Neste trecho eu por exemplo obtenho 4 arquivos (length = 4).
Se eu tiver outro método para ler o arqs.length ele retorna 1. Muito estranho.