Validar objetos no ArrayList

7 respostas
D

estou salvando objetos na minha tabela, e queria verificar se o objeto que estou inserindo possua na tabela, porque não quero valores duplicados. como poderia fazer isso?

Meu codigo está assim:

private Funcionario funcionario = new Funcionario();

private List <Funcionario> listaFuncionario = new ArrayList<Funcionario>();

Repositorios repositorio = new Repositorios();
@PostConstruct
public void init(){
listaFuncionario = funcionarios.listar();   }
/**
 * Salva no Banco e Mostra uma Mensagem.
 */
public void guardar() {
		
	GestaoFuncionario servicos = new GestaoFuncionario(repositorio.getFuncionario());
	
		try {
			  if(funcionario.getFuncNome().trim().equals("")){
				MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_ERROR, "informe o nome do funcionário.");
			}
			  
			else{	
				servicos.salvar(funcionario);
				funcionario = new Funcionario();
				MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_INFO, "Funcionario efetuado com sucesso!!!");
			}
		} catch (RegraNegocioException e) {
			MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_INFO, e.getMessage());
		}
		
	}

7 Respostas

A

Ola Dayson_Rodrigues,

o que diferencia um funcionario de outro?

D

a minha tabela, só possui um: id e nome para que eu possa carregar os nomes no combobox.

A

Você pode criar um método no seu repositório que busca um funcionário pelo nome, quando você for salvar o funcionário você verifica se o nome é o mesmo que esta vindo da view, caso seja dispare uma mensagem usuário já existe na base de dados… em testes ou para você aprender tudo bem, mas não há muito sentido limitar a inserção do registro pelo nome pois podem existir muitos funcionários com o mesmo nome, o cpf seria um bom candidato mas a validação ocorre da mesma forma, abração.

P

Oi, tudo bem?

Você poderia utilizar uma das implementações da interface Set?

G

Você poderia utilizar alguma implementação do tipo Set, pois ela não guarda objetos iguais, mas aí ela só iria comparar os endereços da memória.
E como falado acima, utilizar o “nome” como critério para ver se um funcionário é igual ao o outro não é um bom critério, pois várias pessoas podem ter o mesmo nome né isso? Então toda vez que você adicionar o funcionário, você poderia pesquisar em todos seus funcionários já cadastrados, se um deles já tem um cpf igual ao que tu vai cadastrar, se tiver, tu não cadastra.

P

Acho que não é bem assim… Se a classe Usuário sobrescrever o método equals , é possível definir quais objetos são iguais sem utilizar os endereços da memória.

G

Então cara, mas aí nesse caso ele é só ele não sobrescrever o método equals e que eu saiba o uso da Collections Set é pra isso para não guardar objetos iguais. Se eu estiver errado me corrija por favor.

Criado 15 de abril de 2016
Ultima resposta 3 de mai. de 2016
Respostas 7
Participantes 4