01-lambda表达式举例与语法
1. Lambda表达式的使用举例: (o1, o2) -> Integer.compare(o1,o2); 2. Lambda表达式的格式举例: lambda形参列表 -> lambda体 3. Lambda表达式的格式 -> : lambda操作符或箭头操作符 -> 的左边: lambda形参列表,对应着要重写的接口中的抽象方法的形参列表。 -> 的右边: lambda体,对应着接口的实现类要重写的方法的方法体。 4. Lambda表达式的本质: > 一方面,lambda表达式作为接口的实现类的对象。 ---> "万事万物皆对象" > 另一方面,lambda表达式是一个匿名函数。 5. 函数式接口: 5.1 什么是函数式接口?为什么需要函数式接口? > 如果接口中只声明有一个抽象方法,则此接口就称为函数式接口。 > 因为只有给函数式接口提供实现类的对象时,我们才可以使用lambda表达式。 5.2 api中函数式接口所在的包 jdk8中声明的函数式接口都在java.util.function包下。 5.3 4个基本的函数式接口 接口 对应的抽象方法 消费型接口:Consumer<T> void accept(T t) 供给型接口:Supplier<T> T get() 函数型接口:Function<T,R> R apply(T t) 判断型接口:Predicate<T> boolean test(T t) 6. Lambda表达式的语法规则总结 -> 的左边:lambda形参列表,参数的类型都可以省略。如果形参只有一个,则一对()也可以省略。 -> 的右边:lambda体,对应着重写的方法的方法体。如果方法体中只有一行执行语句,则一对{}可以省略。 如果有return关键字,则必须一并省略。
02-方法引用
1. 举例:
Integer :: compare;
2. 方法引用的理解
> 方法引用,可以看做是基于lambda表达式的进一步刻画。
> 当需要提供一个函数式接口的实例时,我们可以使用lambda表达式提供此实例。
> 当满足一定的条件的情况下,我们还可以使用方法引用或构造器引用替换lambda表达式。
3. 方法引用的本质:
方法引用作为了函数式接口的实例。 ---> “万事万物皆对象”
4. 格式:
类(或对象) :: 方法名
5. 具体使用情况说明:
情况1:对象 :: 实例方法
要求:函数式接口中的抽象方法a与其内部实现时调用的对象的某个方法b的形参列表和返回值类型都相同(或一致)。
此时,可以考虑使用方法b实现对方法a的替换、覆盖。此替换或覆盖即为方法引用。
注意:此方法b是非静态的方法,需要对象调用。
情况2:类 :: 静态方法
要求:函数式接口中的抽象方法a与其内部实现时调用的类的某个静态方法b的形参列表和返回值类型都相同(或一致)。
此时,可以考虑使用方法b实现对方法a的替换、覆盖。此替换或覆盖即为方法引用。
注意:此方法b是静态的方法,需要类调用。
情况3: 类 :: 实例方法
要求:函数式接口中的抽象方法a与其内部实现时调用的对象的某个方法b的返回值类型相同。
同时,抽象方法a中有n个参数,方法b中有n-1个参数,且抽象方法a的第1个参数作为方法b的调用者,且抽象方法a
的后n-1个参数与方法b的n-1个参数的类型相同(或一致)。则可以考虑使用方法b实现对方法a的替换、覆盖。此替换或覆盖即为方法引用。
注意:此方法b是非静态的方法,需要对象调用。但是形式上,写出对象a所属的类 (笔误,改为:写成对象所属的类)
03-构造器引用、数组引用
1. 构造器引用
1.1 格式:
类名 :: new
1.2 说明:
> 调用了类名对应的类中的某一个确定的构造器
> 具体调用的是类中的哪一个构造器呢?取决于函数式接口的抽象方法的形参列表!
2. 数组引用
格式:数组名[] :: new
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南