Compara 2 Array List de Objetos diferentes em Java
16 respostasResolvido
javaarraylist
L
Lucas_marinho
Me da uma ajuda ai galera!
Estou com uma dificuldade,
fiz duas consultas no banco de dados a primeira contem uma lista de 1 funcionários e a segunda uma lista de usuários.
gostaria de saber como verifico se o funcionário já contem na lista de Usuários.
estou usando JPA para conexão ao BD.
#desde já agradeço a ajuda.
#consulta do funcionário
//capitura o valor selecionado na JComboBoxStringnome_funcionario=String.valueOf(jComboBox1.getSelectedItem());funcionarioQuery=entityManager.createQuery("SELECT f.nome FROM Funcionario f WHERE f.nome =:nome");funcionarioQuery.setParameter("nome",nome_funcionario);funcionarioList1.clear();funcionarioList1.addAll(funcionarioQuery.getResultList());
#consulta dos usuários cadastrados
query1=entityManager.createQuery("SELECT u.funcionario FROM Usuario u");list1.clear();list1.addAll(query1.getResultList());
Olá,
blz, vc quer comparar duas listas com objetos de tipos diferentes, uma tem Funcionario e outra tem Usuario, certo?
Já pensou em como vc vai comparar um Funcionario com um Usuario? Que critérios vc vai usar para dizer que são diferentes ou iguais?
Resolvido isso, é só percorrer as listas fazendo tal comparação entre estes objetos.
L
Lucas_marinho
e isso que não to conseguindo fazer
L
Lucas_marinho
tem como você me da uma ajuda ?
R
Rodrigo_Void
No aguardo desta resposta…
L
Lucas_marinho
deixa eu ver se entendi
eu tenho uma list que retorna pra mim o nome de um funcionário.
e tenho a list de usuários que retorna uma list com os funcionários que já tem um usuário cadastrado.
o que acontece e que na list de funcionário eu só tenho um registro por ex: lucas
e na list de usuários eu tenho uma list com o nome dos funcionários com conta de usurários cadastrados ex: lucas, vítor , alam
quero percorrer a list de usuários e verificar se tem o registro da list de funcionários.
L
Lucas_marinho
vei desculpa o incomodo ai e que nunca trabalhei com isso.
e o que pesquisei ficou confuso .
R
Rodrigo_Void
Na teoria geral então você quer ver quais os funcionários não tem usuário cadastrado?
L
Lucas_marinho
olha meu código
public void salvar(){
//capitura o valor selecionado na JComboBox que contem uma list de funcionariosStringnome_funcionario=String.valueOf(jComboBox1.getSelectedItem());//Faz a consulta dos funcionarios cadrastados no Banco de Dados que tenham o mesmo nome selecionado a JComboBoxfuncionarioQuery=entityManager.createQuery("SELECT f.nome FROM Funcionario f WHERE f.nome =:nome");funcionarioQuery.setParameter("nome",nome_funcionario);//Armazena o resultado da consulta em uma listafuncionarioList1.clear();funcionarioList1.addAll(funcionarioQuery.getResultList());//Coverte List p/ String e retira os cochetesStringlistFuncionario=funcionarioList1.toString();Stringteste=listFuncionario.substring(1,listFuncionario.length()-1);//Faz a consulta dos usuarios cadrastados no Banco de Dados e retorna o nome do funcionarioquery1=entityManager.createQuery("SELECT u.funcionario FROM Usuario u");//Armazena o resultado da consulta em uma listalist1.clear();list1.addAll(query1.getResultList());//compara se a lista de funcionario contem algum registro igual na lista de usuariosif(list1.contains(funcionarioList1)){JOptionPane.showInternalMessageDialog(null,"Funcionario já tem conta de usuario cadrastada no sistema");}
}
L
Lucas_marinho
Meu codigo que ver se minhas list de funcionário contem na list de usuario
//compara se a lista de funcionário contem algum registro igual na lista de usuáriosif(list1.contains(funcionarioList1)){JOptionPane.showInternalMessageDialog(null,"Funcionario já tem conta de usuario cadrastada no sistema");}
L
Lucas_marinho
so que não retorna nada mesmo passando um valor que existe na list de usuários
R
Rodrigo_Void
ok, ok, mas na teoria, pra q vc quer isso?
quer ver quais os funcionários não tem usuário cadastrado???
L
Lucas_marinho
sim
L
Lucas_marinho
isso mesmo
R
Rodrigo_Void
Então por que simplesmente não faz uma busca no banco que lhe traga só estes registros? Pra quê faze essas maracutaias no sistema se é melhor e mais fácil via consulta sql?
Ex:
select * from funcionarios where id not in (select from usuarios)
L
Solucao aceita
Lucas_marinho
deu certo meu código ficou assim
publicvoidteste(){//Armazena Valor selecinado no JComboBox em uma StringStringnome_funcionario=String.valueOf(jComboBox1.getSelectedItem());
Listf=entityManager.createNativeQuery("select f.nome from usuario u inner join funcionario f on u.id_funcionario = f.id where f.nome ='"+nome_funcionario+"'").getResultList();System.out.println(f);if(f.size()==1){JOptionPane.showMessageDialog(null,"Usuario já cadrastado","ERRO",JOptionPane.ERROR_MESSAGE);}else{// Salva registro no Banco de Dadostry{entityManager.getTransaction().commit();entityManager.getTransaction().begin();}catch(RollbackExceptionrex){rex.printStackTrace();entityManager.getTransaction().begin();List<Model.Usuario>merged=newArrayList<Model.Usuario>(list.size());for(Model.Usuariop:list){merged.add(entityManager.merge(p));}list.clear();list.addAll(merged);}entityManager.getTransaction().rollback();entityManager.getTransaction().begin();java.util.Collectiondata=query.getResultList();for(Objectentity:data){entityManager.refresh(entity);}list.clear();list.addAll(data);}}