Thursday, 23 April 2015

Lambda

@FunctionalInterface
interface SimpleCalculation{
double calculate(double arg);
}

class MyMath{
public double sin(double x){
return Math.sin(x);
}
}

public class Main {

public static void main(String[] args) {
SimpleCalculation fn = (double x) -> Math.sin(x);
MyMath mm = new MyMath();
System.out.println(something(fn, 10));
System.out.println(something((X) -> Math.sin(X), 10));
System.out.println(something(x -> Math.sin(x), 10)); // if only one parameter, no need for ()
System.out.println(something(Math::sin, 10)); //Method reference, if static ClassName::MethodName
System.out.println(something(mm::sin, 10)); //if instance method, instance::MethodName
}
static double something(SimpleCalculation cal, double value){
return cal.calculate(value);
}

}