网站首页 > 技术文章 正文
我们可能遇到过这样的需求,要在项目中使用数学计算或变换。那么,在Java中,如何优雅的定义这样的数学函数呢?
Function
其实Java已经自带了Function类来助我们完成这样的需求。
可以看到,Function的两个泛型参数,分别是输入和输出,变换逻辑则我们自己定义。下面我们看一个具体的例子
/**
* 不连续的分段函数的计算(图像类似于楼梯的形状)
*
* @param xList 所有分段点的横坐标 size至少为1
* @param yList 所有分段点的纵坐标 size = xList。size() + 1
* @return 未知数对应的y
*/
public static Function<Number, Number> discretePieceWiseFunction(List<Number> xList, List<Number> yList) {
return x -> {
int index = 0;
//获得xList中第一个比x大的元素的index
while (index < xList.size() && xList.get(index).doubleValue() < x.doubleValue()) {
index++;
}
return yList.get(index);
};
}
上面就是我们自定义的数学函数,像注释说明的那样,这个函数就是一个阶梯数字序列对照表,比如我们网上买衣服,身高在某个范围,买某尺码。
然后我们就可以使用它了,可以再封装一个工具类出来,如下
public class FunctionTool {
private static final List<Number> xForFrequency = List.of(130, 180);
private static final List<Number> yForFrequency = List.of(0, 100);
private Function<Number, Number> function;
public FunctionTool() {
this.function = MyFunction.discretePieceWiseFunction(xList, yList);
}
/**
* 数学函数调用
*/
public int eval(int x) {
return Math.round(function.apply(frequency).floatValue());
}
}
是不是很简单呢!
以上就是Java中Function的使用,没有技术难点,也不是多么高大上,但可以实实在在让你的代码更优雅!
猜你喜欢
- 2024-11-16 3.1 Python高级编程-函数式编程工具
- 2024-11-16 面向对象编程的一些思考(面向对象编程的理解)
- 2024-11-16 知识总结-Java8 Stream函数式编程
- 2024-11-16 bind、call、apply 区别?如何实现一个bind?
- 2024-11-16 Javascript基础重拾笔记之手写apply、call
- 2024-11-16 java 8新特性 常用内置函数式接口
- 2024-11-16 7、JavaScript 内置的常用对象有哪些?该对象常用的方法(必会)
- 2024-11-16 Java中“::”是什么含义(java中+是什么)
- 2024-11-16 Java 8 中的 Function:让代码从繁琐到简洁的魔法工具
- 2024-11-16 13万字详细分析JDK中Stream的实现原理(中)
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-