Pesquisa em ArrayList [RESOLVIDO]

5 respostas
D

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.

public final class ProgramaPrincipal {
   public colaborador colab = new colaborador();
   public ArrayList<colaborador> colaborador = new ArrayList<colaborador>();
  
// - - - - - - -  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);

(..........)

    }

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());
                }
(.............)
        }

5 Respostas

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

D

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

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.

nel

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.

C

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)

D

Era isso mesmo que precisava! :smiley:

Obrigado pela ajuda!

Criado 24 de janeiro de 2010
Ultima resposta 26 de jan. de 2010
Respostas 5
Participantes 4