首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数学算子应用于函数的java8可能性

将数学算子应用于函数的java8可能性
EN

Stack Overflow用户
提问于 2015-12-06 11:22:21
回答 2查看 1.2K关注 0票数 2

假设,我有两个函数。

代码语言:javascript
复制
Function<Double, Double> function1 = (x) -> (3*x);
Function<Double, Double> function2 = (x) -> (Math.pow(x, 2));

我想把这些函数相乘。因此,我想得到这个lambda表达式,结果是:

代码语言:javascript
复制
(x) -> (3*Math.pow(x,3));

在Java 8中有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-06 11:31:25

不,你不能用Function做这件事。

假设您有一个Function.multiply(other)方法,那么使用以下两个函数执行乘法会有什么结果?

代码语言:javascript
复制
Function<String, String> f1 = s -> s.substring(1);
Function<String, Integer> f2 = s -> s.length();

但是,如果用DoubleUnaryOperator (或Function<Double, Double>)重写函数,则可以有以下内容:

代码语言:javascript
复制
DoubleUnaryOperator f1 = x -> 3*x;
DoubleUnaryOperator f2 = x -> Math.pow(x, 2);

DoubleUnaryOperator f1xf2 = x -> f1.applyAsDouble(x) * f2.applyAsDouble(x);

这里的区别是,我们知道函数的操作数是一个double,并且它返回一个double

f1xf2函数返回f1f2结果的乘法。因为我们知道两个操作数都是double,所以可以安全地进行乘法。

票数 3
EN

Stack Overflow用户

发布于 2015-12-07 19:39:12

也许您应该看看函数接口的andThen()组合方法。

例如,如下所示:

Function<Double, Double> f1 = (x) -> 3 * x; Function<Double, Double> f2 = (x) -> Math.pow(x, 2); Double x = 100d; Double result = f1.andThen(f2).apply(x);

产出:

90000.0

或者,如果要反转顺序(首先应用Math.pow(),然后乘以3):

Double result = f2.andThen(f1).apply(x);

产出:

30000.0

这也同样有效。

andThen()方法允许您将函数“链接”在一起。如果f1的输出类型与f2的输入类型匹配,那么您就都设置好了。您可以尽可能地继续链接,因为andThen()方法实际上返回了一个新的Function<>对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34116844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档