ArrayList

Bom galera eu tenho que fazer um cadastro usando o ArrayList. Dai tem que ter os métodos de Inserir, Alterar, Excluir, Listar e Consultar. Dai eu to fazendo assim.

[quote][code]package hospital.Medicos;

import java.util.ArrayList;

/**
*

  • @author Giba
    */
    public class RepositorioMedicoLista {

    ArrayList listaMedico;

    public RepositorioMedicoLista() {
    this.listaMedico = new ArrayList();
    }

    public void InserirMedico(Medico medico) {
    this.listaMedico.add(medico);
    }

    public void AlterarMedico(Medico medico) {
    for (int i = 0; i < this.listaMedico.size(); i++) {
    if (this.listaMedico.get(i).getCrm().equals(medico.getCrm())) {
    this.listaMedico.set(i, medico);
    }
    }
    }

    public void ExcluirMedico(Medico medico) {
    for (int i = 0; i < this.listaMedico.size(); i++) {
    if (this.listaMedico.get(i).getCrm().equals(medico.getCrm())) {
    this.listaMedico.remove(i);
    }
    }
    }

    public ArrayList ListarMedico() {
    return listaMedico;
    }
    }[/code][/quote]

Só que eu não sei como fazer o método de consultar. Se alguem puder me ajudar valeus.

Você quer efetuar a busca no seu ArrayList certo?
Faça um foreach então :slight_smile:

for(Medico med : listaMedico){ //supondo que a busca seja pelo código if(medico.getId() == med.getId(){ //encontrou } }

Algo assim, abraços.

public void AlterarMedico(Medico medico) { for (int i = 0; i < this.listaMedico.size(); i++) { if (this.listaMedico.get(i).getCrm().equals(medico.getCrm())) { this.listaMedico.set(i, medico); } } }
Neste trecho você já está fazendo uma consulta, buscando o médico passado por parâmetro ao método Alterar
A busca por um médico seria simplesmente retornar um objeto médico, sendo que esse “médico” precisa ser buscado através de algum atributo, nome, ID, qualquer outra coisa.
Então você compararia esse id (por exemplo) no if ao invés de comparar o objeto médico, e ao invés de alterar a lista, você simplesmente retorna o objeto Médico na posição que aquele id foi encontrado.

Opa galera eu tava olhando as duas respostas e fui tentar adptar aqui mas não consegui chegar a uma conclusão de jeito nenhum.

Boa tarde.

Poste o código do seu método de consulta.

Não entendi o seu método alterar.
Afinal ele não altera nada.

    public void AlterarMedico(Medico medico) {   
        for (int i = 0; i < this.listaMedico.size(); i++) {   
            if (this.listaMedico.get(i).getCrm().equals(medico.getCrm())) {   
                this.listaMedico.set(i, medico);   
            }   
        }   
    }

O objetivo é tirar um médico e colocar outro no lugar?
Se sim, no seu método você precisaria de dois parametros de tipo médico.
Assim:

    public void AlterarMedico(Medico medicoSai, Medico medicoEntra) {   
        for (int i = 0; i < this.listaMedico.size(); i++) {   
            if (this.listaMedico.get(i).getCrm().equals(medicoSai.getCrm())) {   
                this.listaMedico.set(i, medicoEntra);   
            }   
        }   
    }

O método de consulta seria assim:

    public Medico ConsultarMedico(Medico medico) {   
        Medico medico1 = null;
        for (int i = 0; i < this.listaMedico.size(); i++) {   
            if (this.listaMedico.get(i).getCrm().equals(medico.getCrm())) {   
                medico1 = this.listaMedico.get(i);   
            }   
        }
        return medico1;   
    }

Espero que tenha ajudado. =P

  1. assuma que a classe Médico implementa equals e hashCode corretamente
  2. Utilize um Map em que a chave é o id do médico e o valor é a classe médico.
    Se médico não tem Id ele tem um campo que o identifica univocamente como o CRM.

Assim pesquisas por crm se resumem a procurar no mapa

(nomes de métodos começam com minuscula)

public void alterarMedico(Medico medico) {     
    medicos.put(medico.getCrm(), medico);

//   se existia algum antes será substituido

    
}  

método para encotnrar por crm ficaria


public Medico findByCrm (String crm){
  return medicos.get(crm);
}
  1. pesquisas avançadas podem ser feitas o padrão filter (map/reduce sem o reduce)
    Isto é feito definindo uma interface Filter que tem o método accept
public interface Filter<T> {
  
       boolean accept (T obj);

}

o repositorio terá então métodos que usam este filtro, por exemplo


public Collection<Medico> medicosPorEstado(final Estado estado){
   
       return filter ( new Filter<Medico>(){
                public boolean accept (Medico m){
                      return m.getEstado().equals(estado);
                }
      })

}


protected final Collection< Medico > filter ( Filter < Medico > filtro ){

        Collection<Medico> resultado = new HashSet<Medico>();
        for ( Medico m : this.medicos.values() ){ //medicos é um mapa
               if(filtro.accept(m)){
                      resultado.add(m);
              }
       }

       return resultado;

} 

Lembre-se que as pesquisas têm que ser definidas dentro do repositorio, ou seja, o método filter não pode ser publico.
Caso contrário vc deixa de ter um repositorio e passa a ter uma simples coleção.

  1. Se quiser generalize essa class de repositorio para uma AbstractRepository onde coloca todos esses métodos
    e asism pode criar repositorios para outras entidades facilmente.

[quote=blaine]Não entendi o seu método alterar.
Afinal ele não altera nada.

    public void AlterarMedico(Medico medico) {   
        for (int i = 0; i < this.listaMedico.size(); i++) {   
            if (this.listaMedico.get(i).getCrm().equals(medico.getCrm())) {   
                this.listaMedico.set(i, medico);   
            }   
        }   
    }

Meu método de alterar ta alterando sim. Eu crio ele no meu repositório e depois chamo ele no meu formulário no evento do botão

medico.setNome(this.campoNome.getText()); medico.setCodigo(this.campoCodigo.getText()); medico.setCRM(this.campoCrm.getText()); try { fachada.AlterarMedico(medico); JOptionPane.showMessageDialog(this, "Médico alterado"); } catch (ExcecaoMedico ex) { JOptionPane.showMessageDialog(this, ex.getMessage()); }

O método de consulta seria assim:

    public Medico ConsultarMedico(Medico medico) {   
        Medico medico1 = null;
        for (int i = 0; i < this.listaMedico.size(); i++) {   
            if (this.listaMedico.get(i).getCrm().equals(medico.getCrm())) {   
                medico1 = this.listaMedico.get(i);   
            }   
        }
        return medico1;   
    }

E quanto ao método de consulta eu fiz feito você falou e chamei ele assim no meu formulário

if (!campoCrm.getText().trim().equals("")) { medico.setCrm(campoCrm.getText()); medico = fachada.ConsultarMedico(medico); String[] s = new String[1]; s[0] = "Nome:" + " " + medico.getNome() + ", " + "Código:" + " " + medico.getCodigo() + ", " + "Crm:" + " " + medico.getCrm() + "."; lista.setListData(s); }

E agora está funcionando perfeitamente a minha consulta. Valeu ai pela ajuda.