Παράδειγμα σύνθεσης μεθόδων


import java.util.function.DoubleUnaryOperator;
import java.util.function.Function;
import static java.lang.Math.abs;
import static java.lang.Math.PI;

class Inverse {
    // Return true if a almost equals b.
    static boolean almostEquals(double a, double b) {
        final double EPSILON = 1e-15;
        return abs(a - b) < EPSILON;
    }

    public static void main(String args[]) {
        Function<DoubleUnaryOperator, DoubleUnaryOperator> inverse =
            (f) -> ( (x) -> 1. / f.applyAsDouble(x) );

        DoubleUnaryOperator cot = inverse.apply(Math::tan);
        DoubleUnaryOperator sec = inverse.apply(Math::cos);
        DoubleUnaryOperator csc = inverse.apply(Math::sin);

	// Verify value for key arguments.
        assert almostEquals(sec.applyAsDouble(0), 1);
        assert almostEquals(csc.applyAsDouble(PI / 2), 1);
        assert almostEquals(cot.applyAsDouble(PI / 4), 1);
    }
}