Как сделать двойной цикл с условием через StreamAPI

Написал классический двойной for цикл с условием, нахожу пересечения из одного списка с другим по параметру классов и если таковое есть, то добавляю совпадение в третий, текущая версия работает (хотя, скорее всего, можно сделать лучше), но хотелось бы знать как это можно написать на стримах (просто для души и для красивости(?))

List<MentorsAndTrainees> passedCourses = {...}
List<KindsOfMentoring> coursesForSubKind = {...}
List<KindsOfMentoring> matchedPassedCourses = new ArrayList<>();

for (KindsOfMentoring courseForSubKind : coursesForSubKind) {
            for (MentorsAndTrainees passedCourse : passedCourses) {
                if(courseForSubKind.getKindOfMentoringId().equals(passedCourse.getKindOfMentoringId())){
                    matchedPassedCourses.add(courseForSubKind);
                }
            }
        }

Ответы (1 шт):

Автор решения: Roman Konoval

Как-то так:

coursesForSubKind.stream()
   .filter(c -> passedCources.stream()
                 .anyMatch(pc -> pc.getKindOfMentoringId().equals(c.getKindOfMentoringId())))
   .collect(Collectors.toList())
→ Ссылка