Как оптимизировать цикл в java?

Как я могу оптимизировать этот следующий код. Я хочу отображать на моем JTable колледжи, факультеты, курсы и студентов, которые в настоящее время изучают такие курсы.

public void display(){
    ...
    for(College co: collegeDao.getColleges().stream().sorted(Comparator.comparing(College::getName)).collect(Collectors.toList())){
        dtm.addRow(new Object[]{co.getName()});
        for(Department department: deptDao.getDepartments().stream().sorted(Comparator.comparing(Department::getName)).collect(Collectors.toList())){
            if(Objects.equals(department.getCollege().getId(), co.getId())){
                dtm.addRow(new Object[]{null, department.getName()});
                for(Course c: courseDao.getCourses().stream().sorted(Comparator.comparing(Course::getName)).collect(Collectors.toList())){
                    if(Objects.equals(c.getDepartment().getId(), department.getId())){
                        dtm.addRow(new Object[]{null, null, c.getName()});
                        for(Student st: cTakenDao.getCoursesTaken(c).stream().sorted(Comparator.comparing(Student::getName)).collect(Collectors.toList())){
                            dtm.addRow(new Object[]{null, null, null, st.getName()});
                            counter++;    
                        }
                    }
                }
                dtm.addRow(new Object[]{null, null, null, null, "Maxumim Population Allowed   "+department.getPopulation()});
                dtm.addRow(new Object[]{null, null, null, null, "Remaining Slot   "+(department.getPopulation()-counter)});
                counter = 0;
            }
        } 
    }
...

Это действительно работает, но для загрузки моих данных в таблицу требуется время. Если я использую LEFT JOIN в своем SQL-запросе, все мои данные повторяются при отображении на моем JTable.

Надеюсь, кто-нибудь предложит лучшее решение, заранее спасибо.


person Alexander Paudak    schedule 13.03.2018    source источник
comment
Этот вопрос лучше подходит для CodeReview, а не для StackOverflow.   -  person    schedule 13.03.2018
comment
Использование DISTINCT в сочетании с JOIN должно быть несколько быстрее. Чтобы сделать его еще лучше, вы также можете разбить запрос на страницы, как только это будет сделано, создать индексы/ключи для совпадающих столбцов и т. д.   -  person Vasan    schedule 13.03.2018
comment
stackoverflow.com/questions/7457879/   -  person David    schedule 13.03.2018
comment
Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, потому что он больше подходит codereview.stackexchange.com.   -  person lexicore    schedule 13.03.2018
comment
@ буррито77 Это не так. То, что код работает, ничего не значит. Код слишком короткий для любого серьезного обзора, и ОП требует только оптимизации. В то же время здесь прекрасно. codereview.meta.stackexchange.com/a/5778/14363 Просто потому, что задан вопрос иметь рабочий код и, кажется, соответствует теме Code Review, не означает, что он автоматически не соответствует теме Stack Overflow. На обоих сайтах есть много вопросов по теме.   -  person maaartinus    schedule 15.03.2018
comment
@lexicore Можно рекомендовать пост OP на CR, но в будущем, пожалуйста, не используйте Code Review в качестве причины для закрытия вопроса. Оцените запрос и укажите такую ​​причину, как слишком широкая, в первую очередь основанная на мнении и т. д. Затем вы можете указать оператору, что его можно опубликовать на Code Review, если он по теме. См. раздел Что не следует делать в этого ответа на руководство по Проверка кода для пользователей Stack Overflow   -  person Sᴀᴍ Onᴇᴌᴀ    schedule 15.03.2018