Assume, I’ve got two functions.

Function<Double, Double> function1 = (x) -> (3*x); Function<Double, Double> function2 = (x) -> (Math.pow(x, 2));

I want to multiply these functions. So I want to get this lambda expression as a result:

(x) -> (3*Math.pow(x,3));

Is it possible in Java 8?

## Answer

No, you won’t be able to do that with `Function`

.

Suppose you have a `Function.multiply(other)`

method, what would be the result of performing multiplication with the two following functions?

Function<String, String> f1 = s -> s.substring(1); Function<String, Integer> f2 = s -> s.length();

However, if you rewrite your functions with `DoubleUnaryOperator`

(or `Function<Double, Double>`

), then you could have the following:

DoubleUnaryOperator f1 = x -> 3*x; DoubleUnaryOperator f2 = x -> Math.pow(x, 2); DoubleUnaryOperator f1xf2 = x -> f1.applyAsDouble(x) * f2.applyAsDouble(x);

The difference here is that we know that the operand of the function is a `double`

and that it returns a `double`

.

The `f1xf2`

function returns the multiplication of the result of `f1`

and `f2`

. Since we know that both operands are `double`

, the multiplication can be done safely.