[RESOLVIDO]Duvida, condições extensas

7 respostas
S

Bom pessoal eu tenho o seguinte código

for (int i = 0; i < FuncionarioDAO.funcionarios.size(); i++) {
                    for (int j = 0; j < FuncionarioDAO.funcionarios.get(0).getContrato().size(); j++) {
                        if (!(FuncionarioDAO.funcionarios.get(i).getContrato().get(j).getDataEntrada() == null) && !(FuncionarioDAO.funcionarios.get(i).getContrato().get(j).getDataSaida() == null)) {
                            if ((FuncionarioDAO.funcionarios.get(i).getContrato().get(j).getDataEntrada().before(dataMinima)) && (FuncionarioDAO.funcionarios.get(i).getContrato().get(j).getDataSaida().before(dataMinima))) {
                                FuncionarioDAO.funcionarios.get(i).getContrato().get(j).setDataEntradaFormatada("");
                                FuncionarioDAO.funcionarios.get(i).getContrato().get(j).setDataSaidaFormatada("");

                            } else if (FuncionarioDAO.funcionarios.get(i).getContrato().get(j).getDataEntrada().after(dataMaxima) && (FuncionarioDAO.funcionarios.get(i).getContrato().get(j).getDataSaida().after(dataMaxima))) {
                                FuncionarioDAO.funcionarios.get(i).getContrato().get(j).setDataEntradaFormatada("");
                                FuncionarioDAO.funcionarios.get(i).getContrato().get(j).setDataSaidaFormatada("");
                            }
                        }
                    }
                }

Ele é um código que percorre toda lista de funcionarios, e em cada funcionario percorre toda lista de contratos, pra saber se o funcionario está dentro do periodo de tempo escolhido nas variaveis dataMaxima e dataMinima, o que eu quero saber é que, as condições estão ficando extensas de chamar lista da lista, como vocês veêm aí, e tá ficando ilegivel o meu código já, gostaria de saber se eu estou fazendo da maneira correta, ou se existe algum jeito de simplificar isso...Obrigado!

7 Respostas

P

Na minha opinião, a melhor solução seria fazer o join das entidades na propria query. Assim vc garante a condição necessário e terá um ganho de performance substancial.

S

Por enquanto não estou jogando no banco ou puxando do banco, estou puxando os dados de uma planilia do excel e jogando em uma JTable

L

Você pode a cada volta do FOR adicionar o cara do “i” e do “j” em um objeto.
Já ajuda.
Joga FuncionarioDAO.funcionarios.get(i) em um objeto, por exemplo.

Abrass

E

Estou supondo que FuncionarioDAO.funcionarios tenha o tipo List (ou coisa parecida), e getContrato() retorne o tipo List.

for (Funcionario funcionario : FuncionarioDAO.funcionarios) {
    List<Contrato> contratos = funcionario.getContrato();
    for (Contrato contrato : contratos) {
        Date dataEntrada = contrato.getDataEntrada();
        Date dataSaida = contrato.getDataSaida();
        if (dataEntrada != null && dataSaida != null) {
            if (dataEntrada.before (dataMinima) && dataSaida.before (dataMinima))
            || (dataEntrada.after (dataMinima) && dataSaida.after(dataMinima)) {
                contrato.setDataEntradaFormatada ("");
                contrato.setDataSaidaFormatada ("");
            } 
        }
    }
}

Dica: usar algumas variáveis locais e o “for each” não faz mal a ninguém.

S

lounatico:
Você pode a cada volta do FOR adicionar o cara do “i” e do “j” em um objeto.
Já ajuda.
Joga FuncionarioDAO.funcionarios.get(i) em um objeto, por exemplo.

Abrass

Obrigado!
Me ajudou bastante eu tinha uma série de condições complexas depois, para testar várias coisas nos contratos, com isso ficou 10!

Muito obrigado!

edmarr

Se ja resolveu o problema , edit o titulo do post eh coloque a tag [RESOLVIDO] no final .

S

edmarr:
Se ja resolveu o problema , edit o titulo do post eh coloque a tag [RESOLVIDO] no final .

Ok!

Criado 26 de agosto de 2009
Ultima resposta 26 de ago. de 2009
Respostas 7
Participantes 5