public static <T> CompletionStage<T> recover(CompletionStage<T> completionStage, Function<Throwable, T> exceptionHandler){
        return completionStage.exceptionally(exceptionHandler);
    }
@Test
    public void shouldRecoverSupplierFromSpecificResult()
        throws InterruptedException, ExecutionException, TimeoutException {
        CompletableFuture<String> future = CompletableFuture.completedFuture("Wrong Result");

        String result = recover(future, (r) -> r.equals("Wrong Result"), (r) -> "Bla").toCompletableFuture()
            .get(1, TimeUnit.SECONDS);

        assertThat(result).isEqualTo("Bla");
    }