JAVA如何将函数作为方法参数传入

本文介绍了一个使用Java编程的示例,通过接口`IFunction`定义函数接口,利用lambda表达式传递参数,展示了如何在查询数据时结合函数式编程思想。实例中,针对新时代农民工的数据查询操作进行了详细阐述。
摘要由CSDN通过智能技术生成

1、创建函数接口类

    //函数接口类
    public interface IFunction {
        Map<String, Object> queryYearData(Map<String, Object> map);
    };

2、方法调用时,使用lambda表达式传入函数参数

    public CommonResult<List<Map<String, Object>>> queryGeneralFollowUpYear(String loginType) {
        return queryYearData(loginType, (map) -> mapper.queryGeneralFollowUpYear(map));
    }

3、具体方法实现

    private CommonResult<List<Map<String, Object>>> queryYearData(String loginType, IFunction myFunction) {
        SysUser sysUser = SystemUtil.getLoginUser(loginType);
        if (null == sysUser){
            return  new CommonResult<>(CommonResultEmnu.INVALID_USER);
        }
        Map<String, Object> map = new HashMap<>();
        Long createSysId = sysUser.getId();
        map.put("createId", createSysId);

        Map<String, Object> recordYear = myFunction.queryYearData(map);
        return new CommonResult<>(ChartUtil.getLastTwelfthMonthData(recordYear));
    }

新时代农民工

Java中,函数也可以被看作是一种数据类型,因此可以像其他数据类型一样作为参数传递给另一个函数。这种函数作为参数传递的方式被称为函数指针或者回调函数Java中实现函数作为参数传递的方式主要有两种:使用接口和使用Lambda表达式。下面分别介绍这两种方式。 1. 使用接口 首先,我们需要定义一个接口,该接口中包含了我们要传递的函数的声明,例如: ``` public interface MyInterface { void doSomething(int a, int b); } ``` 然后,在另一个函数中,我们可以将这个接口作为参数进行传递,例如: ``` public static void doAnotherThing(int a, int b, MyInterface myInterface) { // 调用传递进来的函数 myInterface.doSomething(a, b); } ``` 在调用`doAnotherThing`函数时,我们可以将一个实现了`MyInterface`接口的类的对象作为第三个参数传递进去,例如: ``` public static void main(String[] args) { doAnotherThing(1, 2, new MyInterface() { @Override public void doSomething(int a, int b) { System.out.println("a + b = " + (a + b)); } }); } ``` 上面的代码中,我们创建了一个匿名内部类来实现`MyInterface`接口,并且在`doSomething`方法中实现了我们要传递的函数的逻辑。然后将这个匿名内部类的实例作为第三个参数传递给`doAnotherThing`函数。 2. 使用Lambda表达式 在Java 8中,引入了Lambda表达式,可以更方便地实现函数作为参数传递。Lambda表达式可以看作是一种匿名函数,可以直接将其作为参数传递。 例如,我们可以直接将一个Lambda表达式作为第三个参数传递给`doAnotherThing`函数,例如: ``` public static void main(String[] args) { doAnotherThing(1, 2, (a, b) -> System.out.println("a + b = " + (a + b))); } ``` 上面的代码中,我们使用Lambda表达式来实现要传递的函数的逻辑,然后将这个Lambda表达式作为第三个参数传递给`doAnotherThing`函数。 需要注意的是,Lambda表达式只能传递给只有一个抽象方法的接口,这种接口被称为函数式接口。因此,我们需要定义一个只有一个抽象方法的接口,并将Lambda表达式赋值给这个接口的变量,例如: ``` public interface MyInterface { void doSomething(int a, int b); } public static void doAnotherThing(int a, int b, MyInterface myInterface) { // 调用传递进来的函数 myInterface.doSomething(a, b); } public static void main(String[] args) { MyInterface myInterface = (a, b) -> System.out.println("a + b = " + (a + b)); doAnotherThing(1, 2, myInterface); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sg_knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值