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.
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.
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;
}
assuma que a classe Médico implementa equals e hashCode corretamente
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);
}
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.
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