JDK1.8新特性(一):lambda表达式

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

lambda表达式

概念:lambda表达式是一个匿名函数,**可以理解成lambda是一段可以传递的代码!**可以写出更简洁、更灵活的代码。提升java的语言表达能力

lambda表达式常用于函数式接口,也就是只有一个抽象方法的接口,简化了匿名内部类的使用!

比如Compartor接口

演化过程

比如Compartor接口

  1. 再没有Compartor接口前,是不是每种比较方式都要新添加方法,在实现类中添加,需要修改原类!!!
  2. 使用策略设计模式,诞生了Compartor接口,现在不需要去修改原类了,只要去创建新类并实现Compartor接口,就增加了一种比较方法
  3. 缺点是:新加比较方法都要去创建新类,并且只写那么点东西,所以又有了匿名内部类,用匿名内部类去实现了接口!根本不需要知道匿名内部类是什么名字
  4. 有了匿名内部类已经不需要去添加新类了,但代码简洁性差,有用的代码就是重写的那个方法,但却直接写了一个类出来
  5. 所以最后产生了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且只能有一个!

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值