2 Ocak 2023 Pazartesi

Stream.onClose metodu

Giriş
Stream kapatılınca onClose() çağrılır.
Each mapped stream is closed after its contents have been placed into this stream.
Açıklaması şöyle.
Close handlers are run when the close() method is called on the stream, and are executed in the order they were added.
Bu metod özellikle Stream tarafından kullanılan sarmalanan ve kapatılması gereken Stream, File vs gibi şeyleri kapatmak için kullanılır

Örnek  - flatMap
Stream'i kapatan bazı metodlar var. Mesela flatMap. Şöyle yaparız. Dosya işlenince silinir.
Stream.generate(...).takeWhile(Objects::nonNull)
  .flatMap(file -> {
      Path p = file.toPath();
      return Files.lines(p, Charset.defaultCharset()).onClose(() -> ...);
    })
  .forEach(System.out::println);
Örnek - flatMap
Şöyle yaparız.
// example stream
Stream<String> original=Stream.of("bla").onClose(()->System.out.println("close action"));

// this is the trick
Stream<String> autoClosed=Stream.of(original).flatMap(Function.identity());

Hiç yorum yok:

Yorum Gönder