Compara 2 Array List de Objetos diferentes em Java

16 respostas Resolvido
javaarraylist
L

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.:slight_smile:

#consulta do funcionário

//capitura o valor selecionado na JComboBox
    String nome_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());

16 Respostas

R

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

e isso que não to conseguindo fazer :weary:

L

tem como você me da uma ajuda ?

R

No aguardo desta resposta…

L

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

vei desculpa o incomodo ai e que nunca trabalhei com isso.

e o que pesquisei ficou confuso .

R

Na teoria geral então você quer ver quais os funcionários não tem usuário cadastrado?

L

olha meu código

public void salvar(){

//capitura o valor selecionado na JComboBox que contem uma list de funcionarios
    String nome_funcionario = String.valueOf(jComboBox1.getSelectedItem());
    
    
    //Faz a consulta dos funcionarios cadrastados no Banco de Dados que tenham o mesmo nome selecionado a JComboBox
    funcionarioQuery = entityManager.createQuery("SELECT f.nome FROM Funcionario f WHERE f.nome =:nome");
    funcionarioQuery.setParameter("nome", nome_funcionario);
    
    //Armazena o resultado da consulta em uma lista
    funcionarioList1.clear();
    funcionarioList1.addAll(funcionarioQuery.getResultList());
    
    
    
    //Coverte List p/ String e retira os cochetes
    String listFuncionario = funcionarioList1.toString();
    String teste = listFuncionario.substring(1, listFuncionario.length() - 1);
    
    
    
    
   
    //Faz a consulta dos usuarios cadrastados no Banco de Dados e retorna o nome do funcionario
    query1 = entityManager.createQuery( "SELECT u.funcionario FROM Usuario u");
    
    //Armazena o resultado da consulta em uma lista
    list1.clear();
    list1.addAll(query1.getResultList());
    
    
    
    
    
    //compara se a lista de funcionario contem algum registro igual na lista de usuarios
    if (list1.contains(funcionarioList1)) {
        
        
        JOptionPane.showInternalMessageDialog(null, "Funcionario já tem conta de usuario cadrastada no sistema");
       
   }

}

L

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ários
        if (list1.contains(funcionarioList1)) {


            JOptionPane.showInternalMessageDialog(null, "Funcionario já tem conta de usuario cadrastada no sistema");

       }
L

so que não retorna nada mesmo passando um valor que existe na list de usuários

R

ok, ok, mas na teoria, pra q vc quer isso?
quer ver quais os funcionários não tem usuário cadastrado???

L

sim

L

isso mesmo

R

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

deu certo meu código ficou assim

public void teste(){

//Armazena Valor selecinado no JComboBox em uma String

String nome_funcionario = String.valueOf(jComboBox1.getSelectedItem());
List f = 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 Dados
                 
                   try {
        entityManager.getTransaction().commit();
        entityManager.getTransaction().begin();
    } catch (RollbackException rex) {
        rex.printStackTrace();
        entityManager.getTransaction().begin();
        List<Model.Usuario> merged = new ArrayList<Model.Usuario>(list.size());
        for (Model.Usuario p : list) {
            merged.add(entityManager.merge(p));
        }
        list.clear();
        list.addAll(merged);
    }

    entityManager.getTransaction().rollback();
    entityManager.getTransaction().begin();
    java.util.Collection data = query.getResultList();
    for (Object entity : data) {
        entityManager.refresh(entity);
    }
    list.clear();
    list.addAll(data);
        
        
    }
            
      
      
      }
L

Valew meu amigo muito abrigado

Criado 1 de junho de 2017
Ultima resposta 1 de jun. de 2017
Respostas 16
Participantes 2