lambda表达式
概念:lambda表达式是一个匿名函数,**可以理解成lambda是一段可以传递的代码!**可以写出更简洁、更灵活的代码。提升java的语言表达能力
lambda表达式常用于函数式接口,也就是只有一个抽象方法的接口,简化了匿名内部类的使用!
比如Compartor接口
演化过程
比如Compartor接口
- 再没有Compartor接口前,是不是每种比较方式都要新添加方法,在实现类中添加,需要修改原类!!!
- 使用策略设计模式,诞生了Compartor接口,现在不需要去修改原类了,只要去创建新类并实现Compartor接口,就增加了一种比较方法
- 缺点是:新加比较方法都要去创建新类,并且只写那么点东西,所以又有了匿名内部类,用匿名内部类去实现了接口!根本不需要知道匿名内部类是什么名字
- 有了匿名内部类已经不需要去添加新类了,但代码简洁性差,有用的代码就是重写的那个方法,但却直接写了一个类出来
- 所以最后产生了lambda表达式!直接写出有用的表达式即可
总结:lambda
其实Lamdba表达式解决了匿名内部类的可读性差问题,将关键的代码提取了出来,同时解决了创建新类的缺点。
Java8的四大内置核心函数式接口
- Consumer:消费型接口(传递参数进行操作,没有返回值,用于操作参数)
- Supplier:供给型接口(不用传递参数,有返回值,用于产生数据)
- Function:函数型接口(正常函数,有返回值,有参数,所以有两个泛型,有种像委派函数差不多)
- Predicate:断言型接口(判断操作)
方法引用与构造器引用
方法引用
方法引用可以理解为Lambda表达式的另外一种表现形式(当lambda可以这样写的时候,可以用方法引用换种形式)
当Lambda体中的内容有方法已经实现了,就可以使用方法引用
共有三种形式
- 对象::实例方法名
- 类::静态方法名
- 类::实例方法名
第一种引用
使用限制
- 方法返回值一样
- 参数列表类型、个数一样
- 即与函数式接口中的抽象方法的函数列表和返回值类型要保持一致
- 当lambda表达式里面只有一个方法逻辑(重要!)


第二种引用
使用限制
- 方法返回值一样
- 参数列表类型、个数一样
- 即与函数式接口中的抽象方法的函数列表和返回值类型要保持一致
- 当lambda表达式里面只有一个方法逻辑(重要!)

第三种引用
类的实例方法?
类怎么会有实例方法呢?
可以看到,使用lambda表达式是有两个参数的呀,而方法引用只有一个
- 方法返回值一样
- lambda表达式必须为一个实例调用方法,而另外一个实例作为参数才能使用
- 即x.equals(y),x调用equals方法,而y作为参数!那么就可以改成string.equals,且必须是按顺序的,即第一个 x为调用者,第二个y为参数

构造器引用
格式
- 类名::new
- 根据函数式接口的参数列表,对构造器进行自动匹配!

函数式接口有一个参数,所以实例的构造方法使用对应一个参数的构造器

数组引用
格式
- Type::new
- Type为数组类型
- 函数式接口的参数列表限制为Integer且只能有一个!

本文深入解析Java 8中的Lambda表达式及其应用场景,介绍如何利用Lambda表达式提升代码的可读性和简洁性。同时,还详细探讨了Java 8的四大核心函数式接口(Consumer、Supplier、Function、Predicate)以及方法引用和构造器引用的使用技巧。
1781

被折叠的 条评论
为什么被折叠?



