![7db2cd344c099850daff8493f7051ae6.png](https://i-blog.csdnimg.cn/blog_migrate/85cb9c4513e1acb805ff880b5ca055d1.jpeg)
一、环境和软件准备
环境:window或者linux环境
下载软件:
1.JDK版本:JDK9下载路径
2.安装eclipse,当然可以使用其他编辑器
二、Lambda表达式预演
1.面向对象的Runnable接口写法
![e10466293dbf2b676d41207b54c8df8c.png](https://i-blog.csdnimg.cn/blog_migrate/ee5da4a31ea57c016710f4983b20a5d4.jpeg)
2.使用函数式编程思想
异同点:
- [ 面向对象强调“一切皆对象”,如果想要做事情,必须找到对象来做]
- [函数式编程思想强调“做什么,而不是怎么做” ]
- 例子:
![de66e9e7688ecdb7cc177cc4e03294d3.png](https://i-blog.csdnimg.cn/blog_migrate/93a1931e80ca3a6111deb88d57830fe3.jpeg)
分析:这样的代码是不是更加简洁。
Runnable接口当中的run方法语义分析:
1 参数列表为空,不需要任何条件就可以执行该方法
2 没有返回值:方法不产生任何数据结果
3 方法体大括号:这个才是关键的方法内容所在
Lambda表达式:
1 前面一个小括号:不需要任何参数条件,即可直接执行
2 箭头指向后面要做的事情
3 箭头后面就好比是方法体大括号,代表具体要做的内容
三、Lambda表达式的标准格式
1.Lambda表达式必须有上下文推导:
a.根据调用方法的参数推导得知Lambda对应的接口
b.根据局部变量的赋值来推导得知Lambda对应的接口
2.三要素:一些参数、一个参数、一些代码
3.比如:(参数类型 参数名称) -> {一些代码}
a. 如果参数有多个,那么使用逗号分隔,如果没有参数,则留空。
b.箭头是固定写法
c.大括号其实就相当于是方法体
例子
1.新建一个接口类
![6944d31aecc81374ce87d0ed07715fa3.png](https://i-blog.csdnimg.cn/blog_migrate/f3ae3b0eccb0971b474aee17669f1206.jpeg)
2.之前写法要写一个接口实现类
![a4fcbce594a01c8aa511cbffdb56cd67.png](https://i-blog.csdnimg.cn/blog_migrate/e9ea420dc3d602b3c6aa713183443683.jpeg)
3.执行类
![7150ae32406a681091b1c5e4550962ae.png](https://i-blog.csdnimg.cn/blog_migrate/5d45ae1a3937874fea09de28e4ddc55d.jpeg)
四、Lambda表达式的参数和返回值
1.新建一个Person类
![8373f08a15fa211cf52f615abc8972de.png](https://i-blog.csdnimg.cn/blog_migrate/806747afaafc0c59922269f554f1af61.jpeg)
2.执行类
![e4c77d35627a83664ed820fd03d9d673.png](https://i-blog.csdnimg.cn/blog_migrate/b1743ba48a4bb53b7a3cbb214d88005d.jpeg)
五、Lambda表达式的省略规则:
1、参数类型可以省略,但是只能省略所有参数的类型,或者干脆都不省略,不能只写个别参数类型
2、如果参数有且仅有一个,那么小括号可以省略。
3、如果大括号之内的语句有且仅有一个,那么无论有没有返回值,return、大括号、分号都可以省略
![7331dc7597d1e0c2e97bd2e08ea6fdde.png](https://i-blog.csdnimg.cn/blog_migrate/e7ef1ddd7dd559244531ef850cebd2d6.jpeg)
![e95fac5fc9a756ea641770766c6541d2.png](https://i-blog.csdnimg.cn/blog_migrate/6fd8f6da8e2534ee1dd269ed5bd0f529.jpeg)
![6417c5f976735ac55011dc891f20c588.png](https://i-blog.csdnimg.cn/blog_migrate/97ce7ed0ea7289ce5168ea384811b526.jpeg)
六、接口的组成更新
1.接口组成部分:
- a.常量
- b.抽象方法
- c.默认方法(Java 8)
- d.静态方法(Java 8)
- e.私有方法(Java 9)
默认方法例子
![8537fe06afdb45cfad54f19c3821a874.png](https://i-blog.csdnimg.cn/blog_migrate/346f9e748afeff36393c054032240811.jpeg)
接口实现类
![c04068be3216652020ab1bdb36c90edd.png](https://i-blog.csdnimg.cn/blog_migrate/83f4f9fd06c6bfd326c96bb6481983b5.jpeg)
执行
![b4cc05fabe4922948697328a99355258.png](https://i-blog.csdnimg.cn/blog_migrate/1b62b9aafd7c82cbeacd2891b3d1119a.jpeg)
静态方法例子
![67c07a28632042dd8e049ba460119380.png](https://i-blog.csdnimg.cn/blog_migrate/3eb79c1ab128278ff31909bb1f0eb621.jpeg)
接口实现类
![006b5499470851d450a5a1dc9c4a4fd2.png](https://i-blog.csdnimg.cn/blog_migrate/e5bfc11c5d1e9d104ef344c21d65a7fc.jpeg)
执行
![240bbd5a3126a8ca8f3cd9e741d184e6.png](https://i-blog.csdnimg.cn/blog_migrate/1a5b8d201b21ec2cfcd23f485a9e0a36.jpeg)
私有方法例子
![cf971f6e864130041dd5bac305ee8dce.png](https://i-blog.csdnimg.cn/blog_migrate/a7d1a0b7e8d75e0ce0cf9a9727f0c152.jpeg)
执行
![8b060c77935c91deffc5e3de607411bf.png](https://i-blog.csdnimg.cn/blog_migrate/6df1475bba49e99c40804583af13c0ed.jpeg)
七、通过方法引用改进代码
1.从java8开始 ,引入一个全新的运算符,方法引用符(两个冒号“::”)所在的表达是一个方法引用,方法引用和Lambda本质是完全一样的,目的就是为了简化Lambda表达式的写法
例子
![aa94fdf4083c7612666f1a9984c8d66d.png](https://i-blog.csdnimg.cn/blog_migrate/592118475382158125950f7929d0bd81.jpeg)
执行
![6c223f86e18538988dda054f61db5a09.png](https://i-blog.csdnimg.cn/blog_migrate/dae283b415b2ecb0379df2ade2da6c96.jpeg)
成员方法引用例子
![96c1233d4169a901aea3b3543b880b7f.png](https://i-blog.csdnimg.cn/blog_migrate/34d14743514b3dcc6efc9d587dac3465.jpeg)
![e61cbd28ea4c4a6670812f2a7a5f5be0.png](https://i-blog.csdnimg.cn/blog_migrate/a1bf7254915b42b2404c7efa714c8c1a.jpeg)
执行
![62924095bf7051910b61375769c1c7a6.png](https://i-blog.csdnimg.cn/blog_migrate/4bcbdff29c067ae8a77badc08aaa01ee.jpeg)
静态方法引用例子
![521438b3afbb78dab65428dc1d35883c.png](https://i-blog.csdnimg.cn/blog_migrate/eb68225a49d403d2ccb39e3315eee84f.jpeg)
执行
![a55cd2103c866963253ec1f0aebfaca2.png](https://i-blog.csdnimg.cn/blog_migrate/fb2df8b36d37573d28a90f050fda8ffe.jpeg)
父类方法引用例子
![a0b73a8beb08779476e9c3ffc167930c.png](https://i-blog.csdnimg.cn/blog_migrate/509f3f3eb8827989a1dac888d7438019.jpeg)
执行
![e4be36c52b4e74e2ac5e38df011c1652.png](https://i-blog.csdnimg.cn/blog_migrate/9b726c535e166f6898bdb076a0c09c6f.jpeg)
本类方法引用例子
![5179d5542d241867c0bb08b9d424a901.png](https://i-blog.csdnimg.cn/blog_migrate/f3510eadde84118c5bfc69f7e740885a.jpeg)
执行
![6169e928dc8423caae347c76d181bcd1.png](https://i-blog.csdnimg.cn/blog_migrate/6426a6b4858e9988f2a06b5fb8d492e9.jpeg)
数组构造器引用例子
![e3d759164ae3f8fa99adcca9a335ebec.png](https://i-blog.csdnimg.cn/blog_migrate/108a92847231768afb88dd4a4399c1c9.jpeg)
执行
![5ddbcfe86f98583f5cc7236e6366ee16.png](https://i-blog.csdnimg.cn/blog_migrate/0772d2912126932b143312cc39db148f.jpeg)
类构造器引用例子
![33f57af69699b2e21aa6cec45fba59df.png](https://i-blog.csdnimg.cn/blog_migrate/64250e168a8aca14d08bc766eb49e629.jpeg)
![80fb7433ca89be73081906c23cab507e.png](https://i-blog.csdnimg.cn/blog_migrate/a391eaa2476564e05aecb04312c7019b.jpeg)
执行
![64afed3adbaf169acf64706c76deef5b.png](https://i-blog.csdnimg.cn/blog_migrate/047c55062b21bffb3c415748b77b6776.jpeg)
七、JDK常用内置的函数式接口
1.从java8开始 ,jdk内置很多函数式接口,下面介绍几个常用到的
Supplier例子
![70c6a41c7ad7c828da27eeefcf51153b.png](https://i-blog.csdnimg.cn/blog_migrate/894a447a21d2e665548cf31c94f8f01a.jpeg)
Consumer例子
![3dade5318c0cb647822936d63a6e5649.png](https://i-blog.csdnimg.cn/blog_migrate/597f12b483f9a84940f4cc44b7982425.jpeg)
![26f599bed786b0266f0c7ff1f6fc8d2a.png](https://i-blog.csdnimg.cn/blog_migrate/2020588e5865718444346f396b355461.jpeg)
Predicate例子
![fa72689477c2c3f3e3dd6111aa1daf88.png](https://i-blog.csdnimg.cn/blog_migrate/a22daa1edc34bc2bb2d0a52309e60922.jpeg)
Function例子
![8310c40eba39808926620f8779d60b6f.png](https://i-blog.csdnimg.cn/blog_migrate/753174affcabc5d1051e6c46ab452a2a.jpeg)
![2e69de6bc2d040edfafa5eb95d7e2a50.png](https://i-blog.csdnimg.cn/blog_migrate/e1484b6a673bec1a10be1f9281b1ef71.jpeg)
八、JDK9使用函数式接口
![6040cf91f29574c67074af8ba7a520e3.png](https://i-blog.csdnimg.cn/blog_migrate/5dc61994a64897bf91d7f9f46f0ad771.jpeg)
---------------------
版权声明:本文为CSDN博主「marser1234」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/marser1234/article/details/91402233