Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

java
communitycreator
thencombine
completablefuture

What is CompletableFuture.thenCombine() in Java?

abhilash

thenCombine() is an instance method of the CompletableFuture class, which combines the results of two completable futures.

It takes a BiFunction as a parameter and returns a new CompletableFuture. The BiFunction takes the execution results of the two futures as method parameters and returns a value.

The thenCombine method is defined in the CompletableFuture class. The CompletableFuture class is defined in the java.util.concurrent package. To import the CompletableFuture class, we use the following import statement:

import java.util.concurrent.CompletableFuture;

Syntax


public <U,V> CompletableFuture<V> thenCombine(CompletionStage<? extends U> other, BiFunction<? super T,? super U,? extends V> fn)

Parameters

  • CompletionStage<? extends U> other: This is the other completable future that needs to be completed.
  • BiFunction<? super T,? super U,? extends V> fn: This is the BiFunction that needs to be executed.

Return value

This method returns a new CompletableFuture.

Code

import java.util.concurrent.*;
import java.util.function.BiFunction;

public class Main {

    static void sleep(int millis){
        try {
            Thread.sleep(millis);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    static void executionThread(){
        System.out.println("Thread execution - " + Thread.currentThread().getName());
    }

    public static void main(String[] args){

        CompletableFuture<String> completableFuture1 = CompletableFuture.supplyAsync(() -> {
            sleep(1000);
            String stringToPrint = "Educative";
            System.out.println("----\nsupplyAsync first future - " + stringToPrint);
            executionThread();
            return stringToPrint;
        });

        CompletableFuture<String> completableFuture2 = CompletableFuture.supplyAsync(() -> {
            sleep(2000);
            String stringToPrint = "Edpresso";
            System.out.println("----\nsupplyAsync second future - " + stringToPrint);
            executionThread();
            return stringToPrint;
        });

        BiFunction<String, String, String> stringStringBiFunction = (res1, res2) -> String.format("\"completableFuture1 result - %s | completableFuture2 result - %s\"", res1, res2);
        CompletableFuture<String> finalCompletableFuture = completableFuture1.thenCombine(completableFuture2, stringStringBiFunction);
        System.out.println("Output of thenCombine - " + finalCompletableFuture.join());
        sleep(3000);
    }
}
Implementation of the thenCombine() method

Code explanation

  • Lines 1–2: We import the relevant packages and classes.

  • Lines 6–12: We define a function called sleep(), which makes the current thread sleep for the given amount of time (in milliseconds).

  • Lines 14–16: We define a function called executionThread(), which prints the current thread of execution.

  • Lines 20–26: We create a completable future called completableFuture1, using the supplyAsyc() method. We pass a supplier to it that sleeps for one second and then invokes the executionThread(). Finally, this method returns a string value.

  • Lines 28–34: We create another completable future called completableFuture2, using the supplyAsyc() method. We pass a supplier to it that sleeps for two seconds and then invokes the executionThread(). Finally, this method returns a string value.

  • Line 36: We create a BiFunction called stringStringBiFunction, which returns the results of both the futures as a string.

  • Line 37: We invoke the thenCombine method on completableFuture1. We pass completableFuture2 and stringStringBiFunction as method arguments to the thenCombine method. This returns a new CompletableFuture called finalCompletableFuture.

  • Line 38: We print the value of finalCompletableFuture to the console.

  • Line 39: The main thread is made to sleep for three seconds.

RELATED TAGS

java
communitycreator
thencombine
completablefuture
RELATED COURSES

View all Courses

Keep Exploring