CodeBlanks Logo Icon CodeBlanks

Spliterator

Spliterator ile paralel gezinmeyi öğrenirsin.

Spliterator<T> arayüzü

Spliterator<T> Java 8 ile gelen, paralel dolaşmaya uygun Iterator benzeri bir arayüzdür. tryAdvance(action) bir sonraki eleman varsa action'ı çalıştırır ve true döner; yoksa false döner. forEachRemaining(action) kalan tüm elemanları tek seferde işler.

trySplit() Spliterator'ı iki parçaya bölerek paralel işleme izin verir; bu özellik akış (stream) API'sinin paralel işleme temelidir. estimateSize() kalan eleman sayısını tahmin eder.

forEachRemaining ile toplu işleme

forEachRemaining(action) kalan tüm elemanları tek çağrıyla işler. Bu, while (sp.tryAdvance(action)) döngüsünden daha derli topludur; Java arka planda yine tek tek gezer ama daha kısa kod yazılır.

Örneğin bir listeden Spliterator alıp sp.forEachRemaining(s -> System.out.println(s)); yazarsın. -> işareti lambda ifadesidir; bir sonraki grupta ayrıntısı işlenecek. Spliterator, Stream API'nin temel taşıdır; list.stream().spliterator() ile akıştan da alınabilir.

Uygulama Spliterator ile listeyi dolaş

List<String> names = new ArrayList<>(); tanımla; "Ayşe", "Alex", "Mehmet" ekle. Spliterator<String> sp = names.spliterator(); al. sp.forEachRemaining(s -> System.out.println(s)); ile tüm elemanları tek çağrıda yazdır.

Başlangıç kodu

Main.java
import java.util.List;
import java.util.ArrayList;
import java.util.Spliterator;

public class Main {
    public static void main(String[] args) {
        // List<String> tanımla, üç isim ekle, Spliterator al, forEachRemaining ile yazdır

    }
}

Örnek çözüm

Main.java
import java.util.List;
import java.util.ArrayList;
import java.util.Spliterator;

public class Main {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Ayşe");
        names.add("Alex");
        names.add("Mehmet");
        Spliterator<String> sp = names.spliterator();
        sp.forEachRemaining(s -> System.out.println(s));
    }
}

Beklenen çıktı

Ayşe
Alex
Mehmet

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 İlerleme çağrısını tamamla

Soru
while (sp.____(s -> System.out.println(s))) { }
Cevap
while (sp.tryAdvance(s -> System.out.println(s))) { }

Açıklama: tryAdvance bir sonraki eleman varsa action'ı çalıştırır.

2 Spliterator.trySplit ne yapar?

  • Tüm elemanları siler
  • Yalnızca ilk elemanı verir
  • Boş bir Spliterator döndürür
  • Spliterator'ı ikiye böler Doğru cevap

Açıklama: trySplit paralel işleme için Spliterator'ı ikiye böler.

3 Spliterator metotlarını eşleştir

Kavram Anlamı
tryAdvance Tek eleman işler
forEachRemaining Kalanını toplu işler
trySplit İkiye böler
estimateSize Kalan sayı tahmini

Orta seviye bölümündeki tüm dersler