3 Haziran 2021 Perşembe

CompletableFuture.thenAcceptBoth metodu - Her İki CompletableFuture Bitince Bir BiConsumer Çalıştırır

Giriş
Not :thenAcceptBothAsync ile kardeştir.

Açıklaması şöyle.
executes a Runnable triggers upon completion of both of two stages. 
Bazı CompletableFuture metodları iki tane işin bitiminde yeni bir iş çalıştırmak içindir. Bunlara "Two to One" denilebilir.

"Two to One"  için kullanılabilecek metodlar
- thenCombine()
- thenAcceptBoth()
olabilir

İmzası şöyle
public <U> CompletableFuture<Void> thenAcceptBoth(
  CompletionStage<? extends U> other,
  BiConsumer<? super T, ? super U> action)
thenCombine() vs - thenAcceptBoth()
Açıklaması şöyle
... when we want to do something with two Futures‘ results, but don't need to pass any resulting value down a Future chain. The thenAcceptBoth method is there to help:
thenCombine() ile şöyle yaparız. Burada CompletableFuture<Foo> şeklinde bir sonuç değeri dönülüyor.
CompletableFuture<String> completableFuture 
  = CompletableFuture.supplyAsync(() -> "Hello")
    .thenCombine(CompletableFuture.supplyAsync(
      () -> " World"), (s1, s2) -> s1 + s2));

assertEquals("Hello World", completableFuture.get());
Örnek
thenAcceptBoth() ile şöyle yaparız. Her iki supplyAsync() bitince, System ile bunları gösterir.
CompletableFuture future = CompletableFuture.supplyAsync(() -> "Hello")
  .thenAcceptBoth(CompletableFuture.supplyAsync(() -> " World"),
    (s1, s2) -> System.out.println(s1 + s2));
Örnek
Şöyle yaparız
var result = 
  CompletableFuture.supplyAsync(Weather::getWeatherFromServerA)
  .thenAcceptBoth( CompletableFuture.supplyAsync((Quotation::getQuotationFromServerA)),
  (weather, quotation) -> System.out.println(weather + ":" + quotation)) ;



Hiç yorum yok:

Yorum Gönder