flatMap nested collection (liste içinde liste) yapılarında kullanılır.
FormTemplateDTO {
List<FormGroupDTO> groups = [
FormGroupDTO {
questions = [Question1, Question2, Question3]
},
FormGroupDTO {
questions = [Question4, Question5]
},
FormGroupDTO {
questions = [Question6]
}
]
}
Yukardaki örnekte questions listelerine ulaşmak istediğimizi düşünün;
this.groups.stream()
.flatMap(group -> group.getQuestions().stream()) // Stream<QuestionDTO>
.map(QuestionDTO::getId)
Sonuç: Stream<QuestionDTO> – Tek düz stream, tüm questionlar birleşik!
Örneğe bir de şöyle bakalım, İlk başta yapımız şu şekilde idi;
Group1 -> [Q1, Q2, Q3]
Group2 -> [Q4, Q5]
Group3 -> [Q6]
FlatMap() ile şu şekle dönüştürdük;
Stream<Question> = [Q1, Q2, Q3, Q4, Q5, Q6]
Gördüğünüz gibi tel bir listede Questionları aldık. Gerçekten iç içe yapıdan flat bir hale geçti.
Bu yapıda Map() kullanımı neden uygun değil,
this.groups.stream()
.map(group -> group.getQuestions().stream()) //Stream<Stream<QuestionDTO>>
.map(QuestionDTO::getId) // ❌ COMPILE ERROR!
Stream<Stream<Question>> = [
Stream[Q1, Q2, Q3],
Stream[Q4, Q5],
Stream[Q6]
]