[RESOLVIDO]Duvida, condições extensas

Bom pessoal eu tenho o seguinte código

[code] 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("");
                        }
                    }
                }
            }

[/code]

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!

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.

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

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

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.

[quote=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[/quote]

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!

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

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

Ok!