Как сделать двойной цикл с условием через 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())