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

createh55个月前 (01-21)技术教程45

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

相关文章

Java方法定义和调用(java中方法如何定义)

public class Java03 {// 自定义方法的角色:实现方法实现功能的人public static int m1(int c, int d) {if (c > d) {System...

Java核心基础之自定义注解(java自定义编译时注解)

本文转载自掘金,作者-jack_xu。主页:https://juejin.cn/user/1802854801877191认识注解注解( Annotation )相当于一种标记,在程序中加入注解就等于...

Java应该怎么学?请查收这份学习指南

Java作为计算机行业中的常用语言,不管是想就业还是提升自我,学习Java都是一个不错的选择,但是很多人在刚接触Java时,都不知道Java应该怎么学,别担心,这里小编详细为大家解答Java的学习方...

什么是JAVA?(什么是java虚拟机)

  什么是JAVA?  JAVA是门面向对象编程语言。JAVA是Sun Microsystems在1990年代初期设计的一种高级现代编程语言,目前由Oracle拥有。不仅吸收了C++语言的各种优点,。...

终于拿到阿里架构师分享的557页深入理解Java模块系统文档

前言Java 9通过模块系统将零散的拼图拼凑到了一起,模块系统成了Java平台的核心而不是扩展功能。Java的模块系统必须有所妥协。它不仅要保持对大量现有代码的支持,使其不至于破坏现有的生态系统,还...