Java’da İçiçe (Nested) Stream’den Veriyi Nasıl Alabiliriz?

İlkay Günel
turkcell
Published in
2 min readDec 7, 2023

Merhabalar.

Bu yazıda içiçe (nested) stream’den verileri nasıl alabiliriz ona değineceğiz.

Şimdi Stream içinde Stream olan ve içerdeki Stream’in de String tipinde veri tuttuğu bir yapı düşünelim. Şu şekilde:

Stream<Stream<String>> nestedStreams = Stream.of(anotherStream);

Şimdi burada bizim bir metot, servis vs. yazmamız gerektiğini ve bize bu şekilde nested stream geldiğini düşünelim. Verileri nasıl elde edip işleyebiliriz?

İşte bu noktada 2 seviyeli stream’leri tek seviyeye indirebilmemizi sağlayan flatMap’den güzelce yararlanabiliriz :)

Kısaca bahsedecek olursak flatMap Java’da bizim için 2 seviyeli stream’leri, array’leri, listeleri vs. kolayca işleyebilmemizi sağlayan bir yapı.

Şimdi durumu örnekleyelim:

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamTestCase {
public static void main(String[] args) {
Stream<String> stringStream = Stream.of("1", "s2", null, "29", "90", "60");
Stream<Stream<String>> nestedStreams = Stream.of(stringStream);

List<String> stringList = getListFromStream(nestedStreams);

stringList.stream().forEach(s -> System.out.println(s));
}

private static List<String> getListFromStream(Stream<Stream<String>> twoLevelsStream) {
Stream<String> oneLevelStream = twoLevelsStream.flatMap(nestedStream -> nestedStream);
List<String> stringList = oneLevelStream.collect(Collectors.toList());

return stringList;
}
}

Şimdi örnek kodumuzda main metodu içerisinde bir String kümesinden Stream<String> elde ediyoruz ve akabinde Stream.of ile de iç içe ikinci Stream’i elde ediyoruz.

getListFromStream metodu oluşturduğumuz bu nested stream’i parametre olarak alıyor ve iki seviyeli stream üzerinde flatMap çalıştırarak bunu tek seviyeli bir Stream’e indiriyor. Akabinde de tek seviyeli Stream üzerinde collect metodunu koşarak String tipinde veri tutan listemizi elde edebiliyoruz.

Bu yazıda anlatacaklarım bu kadar, başka yazıda görüşene kadar sağlıcakla kalın.

--

--