18 Şubat 2021 Perşembe

SpringWebFlux Flux.fromStream metodu

Giriş
fromArray(), fromIterable() gibidir.

Örnek
Eğer birden fazla observer varsa "stream has already been operated upon or closed" hatası alırız
Bu hatayı görmek için şöyle yaparız
List<String> list = Arrays.asList("vins", "guru");
Flux<String> stringFlux = Flux.fromStream(list.stream())
                                .map(String::toUpperCase);

//observer-1
stringFlux
        .map(String::length)
        .subscribe(i -> System.out.println("Observer-1 :: " + i));
//observer-2
stringFlux
        .subscribe(i -> System.out.println("Observer-2 :: " + i));
Hatayı düzeltmek için Supplier<Stream> kullanılır. Şöyle yaparız
Flux.fromStream(() -> list.stream())
     .map(String::toUpperCase);
Örnek
Şöyle yaparız
fun getFileDetail(name: String): Mono<FileDetail> {
  return Flux.fromStream(provideStream())
    .filter { path ->
            path.fileName.toString() == name
    }.map { path ->
            val size = FileChannel.open(path).size()
            val fileName = path.fileName.toString()
            FileDetail(fileName, size)
     }
    .toMono() 
}

Hiç yorum yok:

Yorum Gönder