编程技术文章分享与教程

网站首页 > 技术文章 正文

定义自己的函数--Java中的Function

hmc789 2024-11-16 20:55:53 技术文章 2 ℃

我们可能遇到过这样的需求,要在项目中使用数学计算或变换。那么,在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的使用,没有技术难点,也不是多么高大上,但可以实实在在让你的代码更优雅!

标签列表
最新留言