All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.resilience4j.core.SupplierUtils Maven / Gradle / Ivy

Go to download

Resilience4j is a lightweight, easy-to-use fault tolerance library designed for Java8 and functional programming

There is a newer version: 2.2.0
Show newest version
package io.github.resilience4j.core;

import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;

public class SupplierUtils {

    private SupplierUtils(){}

    /**
     * Returns a composed function that first applies the Supplier and then applies
     * the resultHandler.
     *
     * @param  return type of callable
     * @param  return type of handler
     * @param resultHandler the function applied after supplier
     * @return a function composed of supplier and resultHandler
     */
    public static  Supplier andThen(Supplier supplier, Function resultHandler){
        return () -> resultHandler.apply(supplier.get());
    }

    /**
     * Returns a composed function that first applies the Supplier and then applies
     * {@linkplain BiFunction} {@code after} to the result.
     *
     * @param  return type of after
     * @param handler the function applied after supplier
     * @return a function composed of supplier and handler
     */
    public static  Supplier andThen(Supplier supplier, BiFunction handler){
        return () -> {
            try{
                T result = supplier.get();
                return handler.apply(result, null);
            }catch (Exception exception){
                return handler.apply(null, exception);
            }
        };
    }

    /**
     * Returns a composed function that first executes the Supplier and optionally recovers from an exception.
     *
     * @param  return type of after
     * @param exceptionHandler the exception handler
     * @return a function composed of supplier and exceptionHandler
     */
    public static  Supplier recover(Supplier supplier, Function exceptionHandler){
        return () -> {
            try{
                return supplier.get();
            }catch (Exception exception){
                return exceptionHandler.apply(exception);
            }
        };
    }

    /**
     * Returns a composed function that first applies the Supplier and then applies
     * either the resultHandler or exceptionHandler.
     *
     * @param  return type of after
     * @param resultHandler the function applied after Supplier was successful
     * @param exceptionHandler the function applied after Supplier has failed
     * @return a function composed of supplier and handler
     */
    public static  Supplier andThen(Supplier supplier, Function resultHandler, Function exceptionHandler){
        return () -> {
            try{
                T result = supplier.get();
                return resultHandler.apply(result);
            }catch (Exception exception){
                return exceptionHandler.apply(exception);
            }
        };
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy