FlatMap()

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]
]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.