import java.util.function.BiFunction; import java.util.function.Function; public class Curry { //Curry a method public static Function> curry(BiFunction biFunction) { return t -> u -> biFunction.apply(t, u); } public static int add(int x, int y) { return x + y; } public static void curryMethod() { BiFunction bif = Curry::add; Function> add = curry(bif); Function add5 = add.apply(5); System.out.println(add5.apply(2)); } //Or declare the curried function in one line public static void curryDirectly() { Function> add = x -> y -> x + y; Function add5 = add.apply(5); System.out.println(add5.apply(2)); } //prints 7 and 7 public static void main(String[] args) { curryMethod(); curryDirectly(); } }