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

createh53个月前 (01-21)技术教程32

我们可能遇到过这样的需求,要在项目中使用数学计算或变换。那么,在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/static)+返回值类型(例如int/double void为空不返回)+方法名+(形参){}* 调用方法: 方法名+(实参);...

原来那些:《java基础教程》不是最基础,而是这套解释概念的教程

最近和一个粉丝聊天,才发现我们给资源的时候没有顾忌到零基础的人群对于计算机认识这一块。发现在学习过程中只掌握方法,没有掌握方法的根源到底是什么,抱歉,是我们的错。一个粉丝对我说,学习后才发现,这些很基...

Java-自定义lambda函数(自定义java.lang.string)

自定义lambda函数在 Java 中,可以通过定义函数式接口来创建自定义的 Lambda 函数。函数式接口是一个只包含单个抽象方法的接口,可以使用 Lambda 表达式来实现这个接口。以下是如何定义...

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

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

听说这四个概念,很多Java老手都说不清,你能分得清么?

Java 是很多人一直在用的编程语言,但是有些 Java 概念是非常难以理解的,哪怕是一些多年的老手,对某些 Java 概念也存在一些混淆和困惑。所以,在这篇文章里,会介绍四个 Java 中最难理解的...

spring框架怎么实现依赖注入?(spring框架怎么实现依赖注入的目录)

依赖注入的作用就是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其实现方式通常有两种,一种是属性setter方法注入,另一种是构造方法注入。具体介绍如下:● 属性set...