Lambda表达式

C语言函数
Java方法

数学中的函数 ，就是具有输入量、输出量的一套计算方案。也就是用数据进行操作。


面向对象的思想强调：必须要通过对象的形式来做事情。

函数式思想，尽量忽略面向对象的语法，更强调做什么？而不是用什么形式去做。
lambda表达式就是函数式思想。
格式：
    (形式参数)->{
        代码块(行为、操作、运算)
    }
    形式参数：如果有多个参数，每个参数之间使用逗号隔开，没有参数就是空的。
    ->：是英文-和大于号组成。固定的写法。表示指向动作
    代码块{}：表示我们具体要做的事情，也就是方法体内容。
组成lambda表达式的三要素：
    形式参数、箭头、代码块



lambda省略规则：
参数类型可以省略，但是如果有多个参数的情况下，不能只省略一个
    一个参数，省略参数类型：
        //省略参数类型：
        useFlyable((s)->{
            System.out.println(s+"飞......");
        });
    多个参数，省略参数类型
        useFlyable((s,s1)->{
            System.out.println(s+"飞......"+s1);
        });
如果参数有且只有一个那么可以省略小括号：
        useFlyable(s->{
            System.out.println(s+"飞......");
        });
如果代码块的语句只有一条，那么可以省略大括号和分号，和return关键字:
        useAddable((a,b)->a+b);



使用lambda表达式的前提条件，在什么条件下能使用lambda：
1、使用lambda表达式必须要有接口，抽象类都不行。
2、要求接口有且只有一个抽象方法。

lambda表达式和匿名内部类的区别：
需要的类型不一样：
    1、匿名内部类的父类可以是接口，也可以是抽象类，甚至可以是具体类。
    2、lambda表达式：只能是接口
使用的限制不一样
    如果接口中有且只有一个方法，那么可以使用lambda表达式，也可以使用匿名内部类
    如果接口中有多个抽象方法，那么只能使用匿名内部类，不能使用lambda表达式
实现原理不一样
    匿名内部类：归根结底还是一个单独的类，只不过这个类没有名字，只能使用一次。并且当编译之后，匿名内部类会产生一个单独的.class文件
    lambda表达式：编译之后，是不会编译出单独的.class字节码文件的，对应的字节码会在运行的时候动态生成。


当某个接口有且只有一个抽象方法，那么这个接口可以成为函数式接口。





