• 六百字搞懂lambda


    什么是函数式编程

    在学习lambda之前,我们先搞清楚什么是函数。我理解的函数就是输入一些东西经过一定的规则后输出。假如我们超时买苹果,苹果的单价是5元,则f(x) = 5x;其中x代表我们购买苹果的重量,则苹果的重量和价格对应的一种关系就是函数。我们看看这个函数,我们关注的重点其实就是x和5x。这样我们就好理解了,函数关注的重点就是入参和对应的函数规则,其他的东西都不重要。下面我们结合一段java代码来分析:

    • 函数式接口
    @FunctionalInterface
    public interface Apple {
        int buyApple(int x);
    }
    
    • 方法实现
    public class AppleImpl implements Apple {
        @Override
        public int buyApple(int x) {
    
            return 5*x;
        }
        public static void main(String[] args) {
            Apple apple = new AppleImpl();
            int price = apple.buyApple(6);
        }
    }
    

    我们根据前面定义的函数结合Lambda来重写这个实现 ——关注入参和函数规则,即我们关注的代码只有:

    (int x){
        return 5*x;
    }
    

    然后我们加上lambda运算符就可以得到如下代码了

    Apple apple = (int x) ->{
        return  5*x;
    };
    

    函数式接口

    我们的lambda表达式基于函数式接口,lambda规定接口中只能有一个需要被实现的方法。即可以有多个方法,但是只有一个方法需要被实现。java8接口中被default修饰的方法会有默认实现。

    @FunctionalInterface注解用来修饰函数式接口,接口要求只能由一个未被实现的方法。

    lambda表达式简化

    lambda的语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)。

    1. 简化参数类型,可以不写参数类型,但是必须所有参数的参数类型都不写。
    Apple apple = (x) ->{
        return  5*x;
    };
    
    1. 简化参数小括号,如果只有一个参数则可以省略小括号。
    Apple apple = x ->{
        return  5*x;
    };
    
    1. 简化方法体大括号,如果方法只有一条语句,则可以省略大括号,如果有返回值,不能写return。
    Apple apple = x -> 5*x
    

    我们就不需要使用传统这样优化完成之后,我们整体的代码就成了这样。

    @FunctionalInterface
    public interface Apple {
    
        int buyApple(int x);
    }
    
     public static void main(String[] args) {
         Apple apple = x -> 5*x;
     }
    
  • 相关阅读:
    表的锁机制
    ABAP函数:VIEW_MAINTENANCE_CALL(维护表视图等)
    数据字典中新建表时出现黄色警告的处理
    smartforms长文本处理方式
    打印报表页码
    可以根据柜子内表取出所有的柜子信息的BAPI函数
    方法的重载、类的继承
    构造方法
    函数方法
    方法
  • 原文地址:https://www.cnblogs.com/zhixie/p/12935565.html
Copyright © 2020-2023  润新知