Bom Dia galera, estou criando um programa para gerar um arquivo de funcionarios no formato csv, mas minha base é muito grande, tenho em media uns 500 mil registros por cada arquivo. Gostaria de saber se a alguma forma de otimizar este codigo. Ou se esta estourando por eu armazenar tudo apenas em uma String.Valeu a atenção e aceitamos sugestões. Valeu pessoal e segue o codigo.
public byte [] exportCVSPontoColab(List<Funcionario> dados) throws IOException{
StringBuilder sb = new StringBuilder();
for(Funcionario f : dados){
sb.append(1).append(";");
sb.append(f.getFuncionarioPK().getEmpresa()!=null?f.getFuncionarioPK().getEmpresa():"").append(";");
sb.append(f.getFuncionarioPK().getUnidadeMestre()!=null?f.getFuncionarioPK().getUnidadeMestre():"").append(";");
sb.append(f.getFuncionarioPK().getUnidade()!=null?f.getFuncionarioPK().getUnidade():"").append(";");
sb.append(f.getFuncionarioPK().getRegistro()!=null?f.getFuncionarioPK().getRegistro():"").append(";");
sb.append(f.getTipo()!=null?f.getTipo():"").append(";");
sb.append(f.getFunome()!=null?f.getFunome():"").append(";");
sb.append(f.getCarteira()!=null?f.getCarteira():"").append(";");
sb.append(f.getSerie()!=null?f.getSerie():"").append(";");
sb.append(f.getDtadmissao()!=null?f.getDtadmissao().toString().replaceAll("-","/"):"").append(";");
sb.append(f.getTpant()!=null?f.getTpant():"").append(";");
sb.append(f.getRegant()!=null?f.getRegant():"").append(";");
sb.append(f.getCcusto()!=null?f.getCcusto():"").append(";");
sb.append(f.getDepto()!=null?f.getDepto():"").append(";");
sb.append(f.getTurno()!=null?f.getTurno():"").append(";");
sb.append(f.getCargo()!=null?f.getCargo():"").append(";");
sb.append(f.getLinha()!=null?f.getLinha():"").append(";");
sb.append(f.getDtafastamento()!=null?f.getDtafastamento().toString().replaceAll("-","/"):"").append(";");
sb.append(f.getAfastamento()!=null?f.getAfastamento().toString().replaceAll("-","/"):"").append(";");
sb.append(f.getDtretorno()!=null?f.getDtretorno().toString().replaceAll("-","/"):"").append(";");
sb.append(f.getOpcao()!=null?f.getOpcao():"").append(";");
sb.append(f.getImprel()!=null?f.getImprel():"").append(";");
sb.append(f.getFlag_horario()!=null?f.getFlag_horario():"").append(";");
sb.append(f.getFlag_refeicao()!=null?f.getFlag_horario():"").append(";");
sb.append(f.getDtnasc()!=null?f.getDtnasc().toString().replaceAll("-","/"):"").append(";");
sb.append(f.getCuil()!=null?f.getCuil():"").append(";");
sb.append(f.getJornada_trabalho()!=null?f.getJornada_trabalho():"").append(";");
sb.append(f.getFunbanco()!=null?f.getFunbanco():"").append(";");
sb.append(f.getFunprod()!=null?f.getFunprod():"").append(";");
sb.append(f.getFundias()!=null?f.getFundias():"").append(";");
sb.append(f.getConceito()!=null?f.getConceito():"").append(";");
sb.append(f.getObsconceito()!=null?f.getObsconceito():"").append(";");
sb.append(f.getSexo()!=null?f.getSexo():"").append(";");
sb.append(f.getArmario()!=null?f.getArmario():"").append(";");
sb.append(f.getFreqdiar()!=null?f.getFreqdiar():"").append(";");
sb.append(f.getFuhor_comp()!=null?f.getFuhor_comp():"").append(";");
sb.append(f.getChefia()!=null?f.getChefia():"").append(";");
sb.append(f.getTipoJornada()!=null?f.getTipoJornada():"").append(";");
//Quando se faz o parse de Double para string e retira o ponto gera tres numeros a mais na String que é tratado na substring
sb.append(f.getPis()==null||f.getPis().toString().length()<5?"":String.valueOf(f.getPis()).replaceAll("\\.","").substring(0,String.valueOf(f.getPis()).replaceAll("\\.","").length()-4)).append(";");
sb.append(f.getVnc()!=null?f.getVnc():"").append(";");
sb.append(f.getCpf()!=null?f.getCpf():"").append(";");
sb.append(f.getAproximacao()!=null?f.getAproximacao().toString().replaceAll("-","/"):"").append(";");
sb.append(f.getDataInclusao()!=null?f.getDataInclusao().toString().replaceAll("-","/"):"").append(";");
sb.append(f.getDataAlteracao()!=null?f.getDataAlteracao().toString().replaceAll("-","/"):"").append(";");
sb.append(f.getDataFechamento()!=null?f.getDataFechamento().toString().replaceAll("-","/"):"").append(";");
sb.append(f.getDataJornada()!=null?f.getDataJornada().toString().replaceAll("-","/"):"").append(";");
sb.append("\n");
}
return sb.toString().getBytes();
}
- e imagine 20 pessoas pedindo esse relatório ao mesmo tempo. A memória vai arriar na hora.