Lambdas are purely a call-site construct: the recipient of the lambda does not need to know that a Lambda is involved, instead it accepts an Interface with the appropriate method.
In other words, you define or use a functional interface (i.e. an interface with a single method) that accepts and returns exactly what you want.
For this Java 8 comes with a set of commonly-used interface types in java.util.function
(thanks to Maurice Naftalin for the hint about the JavaDoc).
For this specific use case there's java.util.function.IntBinaryOperator
with a single int applyAsInt(int left, int right)
method, so you could write your method
like this:
static int method(IntBinaryOperator op){
return op.applyAsInt(5, 10);
}
But you can just as well define your own interface and use it like this:
public interface TwoArgIntOperator {
public int op(int a, int b);
}
//elsewhere:
static int method(TwoArgIntOperator operator) {
return operator.op(5, 10);
}
Using your own interface has the advantage that you can have names that more clearly indicate the intent.