Como faço para remover um objeto de um List?

5 respostas
pimentaft

Olá!
Como faço para remover um objeto de um List?

Códigos:

@Entity
@Table(name="aloca_turma_sala")
public class Aloca implements Serializable{
	
	@EmbeddedId
	private AlocaPK id;
	
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumn(name="codcampus",insertable=false,updatable=false)
	private Campus campus;
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumns(value={
				@JoinColumn(name="codcampus",insertable=false,updatable=false),
				@JoinColumn(name="codbloco",insertable=false,updatable=false)
		})
	private Bloco bloco;
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumn(name="codpavimento",insertable=false,updatable=false)
	private Pavimento pavimento;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumns(value={
			@JoinColumn(name="codcampus",insertable=false,updatable=false),
			@JoinColumn(name="codbloco",insertable=false,updatable=false),
			@JoinColumn(name="codpavimento",insertable=false,updatable=false),
			@JoinColumn(name="codsala",insertable=false,updatable=false),
	})
	private Sala sala;
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumn(name="codturma",insertable=false,updatable=false)
	private Turma turma;
	@Column(name="horainicio",insertable=false,updatable=false)
	private String horaInicio;
	@Column(name="horafim",insertable=false,updatable=false)
	private String horaFim;
	@Column(name="diasemana",insertable=false,updatable=false)
	private String diaSemana;
//gets e sets omitidos
@Embeddable
public class AlocaPK implements Serializable{
	@Column(name="codcampus")
	private String codCampus;
	@Column(name="codbloco")
	private String codBloco;
	@Column(name="codpavimento")
	private int codPavimento;
	@Column(name="codsala")
	private String codSala;
	@Column(name="codturma")
	private String codTurma;
	@Column(name="horainicio")
	private String horaInicio;
	@Column(name="horafim")
	private String horaFim;
	@Column(name="diasemana")
	private String diaSemana;
//gets e sets omitidos

Função para deletar o objeto da lista:

public void dadosDeletarTurmas(ActionEvent event){
//pego os dados da tabela no jsp. A lista q carrega esta tabela chama-se listaAlocacoes
		FacesContext fc = FacesContext.getCurrentInstance();
		UIParameter parametroCodCampus = (UIParameter) event.getComponent().findComponent("pdcodcampus");
		codcampus = parametroCodCampus.getValue().toString();
		UIParameter parametroCodBloco = (UIParameter) event.getComponent().findComponent("pdcodbloco");
		codbloco = parametroCodBloco.getValue().toString();
		UIParameter parametroCodPavimento = (UIParameter) event.getComponent().findComponent("pdcodpavimento");
		codpavimento = Integer.parseInt(parametroCodPavimento.getValue().toString());
		UIParameter parametroCodSala = (UIParameter) event.getComponent().findComponent("pdcodsala");
		codsala = parametroCodSala.getValue().toString();
		UIParameter parametroHoraInicio = (UIParameter) event.getComponent().findComponent("pdhorainicio");
		horainicio = parametroHoraInicio.getValue().toString();
		UIParameter parametroHoraFim = (UIParameter) event.getComponent().findComponent("pdhorafim");
		horafim = parametroHoraFim.getValue().toString();
		UIParameter parametroDiaSemana = (UIParameter) event.getComponent().findComponent("pddiasemana");
		diasemana = parametroDiaSemana.getValue().toString();
		UIParameter parametroCodTurma = (UIParameter) event.getComponent().findComponent("pdcodturma");
		codturma = parametroCodTurma.getValue().toString();
		
		System.out.println("--------------------dados para deletar-----------------------------");
		
		AlocaPK id = new AlocaPK();
		id.setCodBloco(codbloco);System.out.println(codbloco);
		id.setCodCampus(codcampus);System.out.println(codcampus);
		id.setCodPavimento(codpavimento);System.out.println(codpavimento);
		id.setCodSala(codsala);System.out.println(codsala);
		id.setCodTurma(codturma);System.out.println(codturma);
		id.setDiaSemana(diasemana);System.out.println(diasemana);
		id.setHoraInicio(horainicio);System.out.println(horainicio);
		id.setHoraFim(horafim);System.out.println(horafim);
		
		System.out.println("--------------------dados na lista-----------------------------");
		
		for (Aloca aloca2:listaAlocacoes){
			System.out.println(aloca2.getId().getCodBloco());
			System.out.println(aloca2.getId().getCodCampus());
			System.out.println(aloca2.getId().getCodPavimento());
			System.out.println(aloca2.getId().getCodSala());
			System.out.println(aloca2.getId().getCodTurma());
			System.out.println(aloca2.getId().getDiaSemana());
			System.out.println(aloca2.getId().getHoraInicio());
			System.out.println(aloca2.getId().getHoraFim());
		}
		
		Aloca aloca = new Aloca();
		aloca.setId(id);
		
		if(listaAlocacoes.remove(aloca)){
			System.out.println("removeu");
		}else{
			System.out.println("nao encontrou");
		}
	}

resultado no console:

--------------------dados para deletar-----------------------------
A
01
1
01
ADCMC7
QUARTA
08:00
12:00
--------------------na lista-----------------------------
A
01
1
01
ADCMC7
QUARTA
08:00
12:00
nao encontrou

Está identico…

Alguem pode me ajudar???

5 Respostas

ignacio83

Implemente o equals e o hashCode da classe que vc quer remover…

pimentaft

Opa!
Obrigado por responder!
Eu implementei os metodos na classe Aloca e nao adiantou…
veja:

@Entity
@Table(name="aloca_turma_sala")
public class Aloca implements Serializable{
	
	@EmbeddedId
	private AlocaPK id;
	
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumn(name="codcampus",insertable=false,updatable=false)
	private Campus campus;
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumns(value={
				@JoinColumn(name="codcampus",insertable=false,updatable=false),
				@JoinColumn(name="codbloco",insertable=false,updatable=false)
		})
	private Bloco bloco;
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumn(name="codpavimento",insertable=false,updatable=false)
	private Pavimento pavimento;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumns(value={
			@JoinColumn(name="codcampus",insertable=false,updatable=false),
			@JoinColumn(name="codbloco",insertable=false,updatable=false),
			@JoinColumn(name="codpavimento",insertable=false,updatable=false),
			@JoinColumn(name="codsala",insertable=false,updatable=false),
	})
	private Sala sala;
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumn(name="codturma",insertable=false,updatable=false)
	private Turma turma;
	@Column(name="horainicio",insertable=false,updatable=false)
	private String horaInicio;
	@Column(name="horafim",insertable=false,updatable=false)
	private String horaFim;
	@Column(name="diasemana",insertable=false,updatable=false)
	private String diaSemana;
//gets e sets omitidos

@Override
	public boolean equals(Object arg0) {
		// TODO Auto-generated method stub
		return super.equals(arg0);
	}
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return super.hashCode();
	}
ignacio83

Desse jeito que vc fez não vai funcionar…

Vc fez um super.equals() que está utilizando a mesma implementação de antes.

O problema é que o equals da Classe Object compara endereços de memória para verificar se um objeto é igual a outro. E com certeza neste seu caso os objetos possuem endereços de memória diferentes, implemente o equals através de um campo único, ou através de um conjunto deles.

Implemente através da sua PK.

Dúvidas: http://www.geocities.com/technofundo/tech/java/equalhash.html

pimentaft

Obrigado pelas dicas!
Fiz de uma maneira que funcionou.Acho q foi isso q vc quiz dizer:

public void dadosDeletarAlocacoes(ActionEvent event){
		FacesContext fc = FacesContext.getCurrentInstance();
		UIParameter parametroCodCampus = (UIParameter) event.getComponent().findComponent("pdcodcampus");
		codcampus = parametroCodCampus.getValue().toString();
		UIParameter parametroCodBloco = (UIParameter) event.getComponent().findComponent("pdcodbloco");
		codbloco = parametroCodBloco.getValue().toString();
		UIParameter parametroCodPavimento = (UIParameter) event.getComponent().findComponent("pdcodpavimento");
		codpavimento = Integer.parseInt(parametroCodPavimento.getValue().toString());
		UIParameter parametroCodSala = (UIParameter) event.getComponent().findComponent("pdcodsala");
		codsala = parametroCodSala.getValue().toString();
		UIParameter parametroHoraInicio = (UIParameter) event.getComponent().findComponent("pdhorainicio");
		horainicio = parametroHoraInicio.getValue().toString();
		UIParameter parametroHoraFim = (UIParameter) event.getComponent().findComponent("pdhorafim");
		horafim = parametroHoraFim.getValue().toString();
		UIParameter parametroDiaSemana = (UIParameter) event.getComponent().findComponent("pddiasemana");
		diasemana = parametroDiaSemana.getValue().toString();
		UIParameter parametroCodTurma = (UIParameter) event.getComponent().findComponent("pdcodturma");
		codturma = parametroCodTurma.getValue().toString();
		
		AlocaPK id = new AlocaPK();
		id.setCodBloco(codbloco);
		id.setCodCampus(codcampus);
		id.setCodPavimento(codpavimento);
		id.setCodSala(codsala);
		id.setCodTurma(codturma);
		id.setDiaSemana(diasemana);
		id.setHoraInicio(horainicio);
		id.setHoraFim(horafim);
		aloca.setId(id);
		
		for (Aloca aloca2:listaAlocacoes){
			if ((aloca2.getId().getCodBloco().equals(aloca.getId().getCodBloco())) && 
				(aloca2.getId().getCodCampus().equals(aloca.getId().getCodCampus())) &&
				(aloca2.getId().getCodPavimento() == aloca.getId().getCodPavimento()) &&
				(aloca2.getId().getCodSala().equals(aloca.getId().getCodSala())) &&
				(aloca2.getId().getCodTurma().equals(aloca.getId().getCodTurma())) && 
				(aloca2.getId().getDiaSemana().equals(aloca.getId().getDiaSemana())) &&
				(aloca2.getId().getHoraInicio().equals(aloca.getId().getHoraInicio())) && 
				(aloca2.getId().getHoraFim().equals(aloca.getId().getHoraFim()))){
				if(listaAlocacoes.remove(aloca2)){
					System.out.println("removeu");
				}else{
					System.out.println("nao encontrou");
				}
			}
		}
	}

Ficou grande por todos os atributos serem chaves primárias, mas enquanto não encontro outra solução, vou utilizar essa para dá prosseguimento ao meu projeto atrasado.

Mto obrigado!

ignacio83

Não foi bem isso, que eu quis dizer… Mas percebi que vc está enrolado com o tempo do seu projeto, quando estiver mais tranquilo dê uma estudada das implementações dos métodos equals e hashCode.

Boa sorte

Criado 8 de dezembro de 2008
Ultima resposta 8 de dez. de 2008
Respostas 5
Participantes 2