stream导致的堆栈溢出问题

if(regionalAssessmentQuery.getGrade()!=null&&regionalAssessmentQuery.getGrade()!="" &&regionalAssessmentDTOS.size()>0){
            List<RegionalAssessmentDTO> collect = regionalAssessmentDTOS.stream().filter(regionalAssessmentDTO -> {
                regionalAssessmentDTO.setRegionalAssessmentDTOS(regionalAssessmentDTOS.stream().filter(assessmentDTO -> {
                    assessmentDTO.setRegionalAssessmentDTOS(assessmentDTO.getRegionalAssessmentDTOS().stream().filter(regionalAssessmentDTO2 -> regionalAssessmentDTO2.getType() == null ? false : regionalAssessmentDTO2.getType().equals(regionalAssessmentQuery.getGrade())).collect(Collectors.toList()));
                    return assessmentDTO.getRegionalAssessmentDTOS().size() > 0;
                }).collect(Collectors.toList()));
                return regionalAssessmentDTO.getRegionalAssessmentDTOS().size() > 0;
            }).collect(Collectors.toList());
            dtoPage.setRecords(collect);
        }else dtoPage.setRecords(regionalAssessmentDTOS);

如果你的条件搜索涉及到多个方法互相调用,可能会形成长链调用,最终导致栈溢出。在这种情况下,你可以考虑优化你的代码逻辑,减少方法之间的相互依赖。
在这里插入代码片

//改善堆栈溢出
if(regionalAssessmentQuery.getGrade()!=null&&regionalAssessmentQuery.getGrade()!="" &&regionalAssessmentDTOS.size()>0){
            for (RegionalAssessmentDTO regionalAssessmentDTO : regionalAssessmentDTOS) {
                for (RegionalAssessmentDTO assessmentDTO : regionalAssessmentDTO.getRegionalAssessmentDTOS()) {
                    assessmentDTO.setRegionalAssessmentDTOS(assessmentDTO.getRegionalAssessmentDTOS().stream().filter(regionalAssessmentDTO2 -> regionalAssessmentDTO2.getType() == null ? false : regionalAssessmentDTO2.getType().equals(regionalAssessmentQuery.getGrade())).collect(Collectors.toList()));
                }
               regionalAssessmentDTO.setRegionalAssessmentDTOS( regionalAssessmentDTO.getRegionalAssessmentDTOS().stream().filter(regionalAssessment->{
                   return regionalAssessment.getRegionalAssessmentDTOS().size()>0;
               }).collect(Collectors.toList()));

            }
            List<RegionalAssessmentDTO> collect = regionalAssessmentDTOS.stream().filter(regionalAssessmentDTO -> {
                return regionalAssessmentDTO.getRegionalAssessmentDTOS().size() > 0;
            }).collect(Collectors.toList());
            dtoPage.setRecords(collect);
        }else dtoPage.setRecords(regionalAssessmentDTOS);

你可能感兴趣的:(java)