Pesquisa em ArrayList [RESOLVIDO]

Estou com um problema que parece bastante simples mas ando a dias para o resolver!

Estou a criar um pequeno programa que esta estruturado da seguinte forma…

Tenho uma classe para os colaboradores de uma empresa.

public class colaborador extends pessoa implements java.io.Serializable { int numcolaborador; colaborador(){} public colaborador(String nome,String morada,String cidade,int codigop,String tele,String dep, String cargo, Date hi,Date ho,int n){ Nome = nome; Morada = morada; CodigoPostal = codigop; Cidade = cidade; Telefone = tele; ++numcolaborador; } @Override public String toString(){ return ("\nNumero Colaborador: "+numcolaborador+"\nNome: "+Nome+"\nMorada: "+Morada+"\nCidade: "+Cidade+"\nDepartamento: "+Departamento+"\nCargo: "+Cargo+ "\n"); } }

E depois tenho o programa principal onde vou chamar as varias classes e metodos que tenho.
Fica aqui o ex. de como estou a inserir os dados do colaborador.

[code]public final class ProgramaPrincipal {
public colaborador colab = new colaborador();
public ArrayList colaborador = new ArrayList();

// - - - - - - - Inserir Colaborador - - - - - -
public void inserircol(){
int i;
colaborador colab = new colaborador();
colab.numcolaborador = colaborador.size() + 1;
colab.setNome(pessoa.inputNome(“Insira o nome”));
colab.setMorada(pessoa.inputMorada(“Insira a Morada”));
colab.setCodigoPostal(pessoa.inputCodigop(“Insira o codigo postal”));
colab.setCidade(pessoa.inputCidade(“Insira a cidade”));
colab.setTelefone(pessoa.inputTelefone(“Insira o número de telefone”));
colaborador.add(colab);

(…)

}[/code]

Agora, o meu problema é o seguinte:
Quando quero fazer uma “pesquisa” no ArrayList para encontar um registo ja inserido… como faço ?
Ex. daquilo que quero fazer:

// - - - - - - - Alterar Registos - - - - - - public void alteraDadoscol(){ int i; String name = javax.swing.JOptionPane.showInputDialog("Indique o nome do Colaborador a alterar: "); if (name.equalsIgnoreCase(colab.Nome)){ //AQUI ESTA O MEU PROBLEMA!! O "colab.Nome" esta com valor NULL. mas como vou resolver ? i = JOptionPane.showConfirmDialog(null, "Deseja Alterar o Colaborador :" +colaborador.toString(), "Alterar Colaborador?", JOptionPane.YES_NO_OPTION); if (i == JOptionPane.YES_OPTION){ colab.setMorada(pessoa.inputMorada("Insira a Morada")); colab.setCodigoPostal(pessoa.inputCodigop("Insira o codigo postal")); colab.setCidade(pessoa.inputCidade("Insira a cidade")); colab.setTelefone(pessoa.inputTelefone("Insira o numero de telefone")); JOptionPane.showMessageDialog (null, "Registo Alterado com sucesso: "+colaborador.toString()); } (.............) }

delrock, bem-vindo ao GUJ!Eu podia por direto a resposta, mas eu tenho um tópico aqui que se vc é iniciante, é indispensável que vc leia com carinho:
http://www.guj.com.br/posts/list/54036.java

[quote=Ironlynx]delrock, bem-vindo ao GUJ!Eu podia por direto a resposta, mas eu tenho um tópico aqui que se vc é iniciante, é indispensável que vc leia com carinho:
http://www.guj.com.br/posts/list/54036.java

[/quote]

Obrigado, ja tinha visto esse topico antes.
Mas continuo sem perceber porque não consigo consultar o o arraylist.

ou melhor…
Como é que consigo "chegar" a variavel NOME que se encontra na Class Colaborador ??
Isto porque o que procuro não esta em COLAB.NOME, certo?

Se inserir o codigo:

for (int e =0;e<=colaborador.size();e++){ JOptionPane.showMessageDialog (null, "Os colaboradores são: "+colaborador.get(e));
consigo ver todos os “grupos” de dados. Mas eu quero apenas os Nomes.

Bom dia.

Se você possui um List de objetos, no seu caso, de Colaboradores, quando acessar a posição do List com o método .get(index) você vai retornar o Objeto Colaboradores, perfeito? Creio que dentro do seu objeto Colaboradores você tenha os getters e setters, portanto, se queres apenas acessar a variavél nome contida no objeto Colaboradores basta modificar algo simples no seu exemplo, ficando assim:

for (int e =0;e<=colaborador.size();e++){ JOptionPane.showMessageDialog (null, "Os colaboradores são: "+colaborador.get(e).getNome());

Se não me falha a memória, a partir do Java 1.5 surgiu o foreach, que é muito mais fácil e menos trabalhosa de se utilizar, ficaria assim:

for (Colaboradores colaborador : listColaboradores) { JOptionPane.showMessageDialog (null, "Os colaboradores são: "+colaborador.getNome()); }

Ele percorre a sua list com o tipo de Objeto contido nela.
É isto, Abraços.

Para fazer uma busca pode-se usar o método equals sobrecarregado.

public boolean equals(Object o){
		if(o instanceof Colaborador){
			return ((Colaborador)o).getNome().equals(this.getNome());
		}
		return false;
	}

isso dirá como se compara objetos do tipo colaborador.
Esse método (equals) ficará em sua classe colaborador.

Em seguida se faz:

public static Pessoa busca(Colaborador colaborador){
		int i = colaboradores.indexOf(colaborador);
		if(i >= 0){
			return colaborador = colaboradores.get(i);
		}
		return null;
	}

O método indexOf se baseia no equals para saber comparar objetos e pega-lo (se existir), e o metodo get de List pega o objeto daquela posição.
E no caso colaboradores é sua lista de Colaboradores (coloquei estática)

Era isso mesmo que precisava! :smiley:

Obrigado pela ajuda!