6 Nisan 2023 Perşembe

Hazelcast Jet Traversers Sınıfı

Giriş
Şu satırı dahil ederiz 
import com.hazelcast.jet.Traversers;
Bu sınıf Traverser arayüzünü gerçekleştiren static factory metodlar sunar. Traverser arayüzü bir @FunctionalInterface O yüzden çoğu gerçekleştirim sadece lambda ile yapılabilir.

stream metodu
Kod şöyle
public static <T> Traverser<T> traverseStream(@Nonnull Stream<T> stream) {
  return traverseSpliterator(stream.spliterator()).onFirstNull(stream::close);
}
Stream nesnesini Spliterator nesnesi çevirir ve dolaşır. Altta kullanılan kod şöyle. Burada next() metodu Spliterator nesnesi tryAdvance() ile ilerlemişse sonraki nesneyi döner ve sonraki nesneyi finally block içinde tekrar null yapar. Böylece tryAdvance() false dönerse null döner ve stream::close da çalışır.
private static class SpliteratorTraverser<T> implements Traverser<T>, Consumer<T> {
  private final Spliterator<T> spliterator;
  private T nextItem;

  SpliteratorTraverser(Spliterator<T> spliterator) {
    this.spliterator = spliterator;
  }

  @Override
  public T next() {
    try {
      boolean advanced = spliterator.tryAdvance(this);
      if (advanced) {
        requireNonNull(nextItem);
      }
      return nextItem;
    } finally {
      nextItem = null; // Burada nesneyi null yap
    }
  }

  @Override
  public void accept(T t) {
    nextItem = t;
  }
}


traverseIterable metodu
İmzası şöyle
public static <T> Traverser<T> traverseIterable(Iterable<? extends T> iterable)


Hiç yorum yok:

Yorum Gönder

THIRD-PARTY.txt Dosyası

Kullanılan harici kütüphanelerin sürümleri bu dosyada Dosyanın yolu şöyle hazelcast/licenses/THIRD-PARTY.txt