Lambda 表达式复习

简介: Lambda 表达式复习

凡是确定的东西,都要删掉

Runnable r2 = () -> {sout("....")};

Comparator<Integer> com1 = (o1,o2) ->Integer.compare(o1,o2) ;

//方法引用

参数也是一样的

Comparator<Integer> com2 =  Integer :: compare;

Lambda表达式的使用举例:

格式

->:箭头操作符

左边:对应着要重写的方法的形参列表

右边:重写的方法的方法体

只有一条语句可以直接省略大括号和return

接口只有一个抽象方法的场景

六个格式

1.无参无返回值:run方法

2.只有一个参数没返回值

3.和上面一样,增加了一个类型推断,类型可以省略

int[] arr = {};

Hashmap<String,Integer> map = new HashMap<>();

var entryset = mao.entrySet();   jdk10以后

4.只有一个参数的时候,小括号可以省略

5.有大括号和返回值的时候,删除大括号也得删除返回值

函数式接口?

什么是函数式接口

lambda表达式看做一个匿名函数

匿名函数是一个对象

先造类实现接口再造对象调用,有点重,所以java就学些了别人的优点

函数式编程思想:不注重过程,注重结果,lambda表达式也是一个对象

什么是函数式接口?

只声明了一个抽象方法,则此接口就是函数式接口

基本的函数式接口(4个)

接口                                         抽象方法

Consumer<T> 消费型接口       void accept(T t)

Supplier<T> 供给型接口           T get()

Function<T>函数型                   R apply(T t)

Predicted<T>判断型接口           boolean test(T t)

函数式接口都有在java.util.funtion包下

总结: 形参列表 -> {方法体};

构造器应用/方法引用

Integer :: compare

如何理解??

>方法引用看做基于lambda表达式的进一步刻画

当需要提供一个函数式接口的实例时,可以使用lambda表达式

>当满足一定的条件的情况下,我们还可以使用方法引用或构造器应用替换lambda表达式

方法引用的本质 ->作为了函数式接口的实例

格式

类(或对象):: 方法名

情况1:

对象  ::  实例方法

要求抽象方法A和内部实现的调用的某个方法B的形参和返回值都相同,可以用b对a进行覆盖

注意:此方法b是非静态的方法

类    ::   静态方法

基本同上

类    ::   实例方法

调用的方法的调用者是形参的第一个参数,返回值相同

println 和 accept方法参数和返回值一样,把println看做accept的一个覆盖

Consumer<String> com2 = System.out :: println;

要求:函数时间接口中的抽象方法a和调用的方法b的返回值相同

同时抽象方法有n个参数,b有n-1个方法

且抽象方法a的第一个参数作为方法b的调用者

且a的后n-1个参数和方法b的形参相同或一致

就可以使用b对a进行覆盖或引用

(b是一个非静态的方法,需要对象调用,但是形式上使用所属的类来调用)

构造器引用/数组引用

Employee :: new

类名 :: new

说明:

>调用了类名对应的类中的某一个确定的构造器

>具体调用的类中的哪一个构造器,取决于函数式接口的抽象方法的形参列表

数组引用

数组名[]   ::   new;

相关文章
|
5月前
|
存储 C语言
C primer plus 学习笔记 第5章 运算符、表达式和语句
C primer plus 学习笔记 第5章 运算符、表达式和语句
|
6月前
|
存储 C语言
C语言程序设计——赋值表达式
C语言程序设计——赋值表达式
|
存储 算法 编译器
C++ lambda 表达式
# C++ `lamdba` 表达式 > Lambda表达式是C++11引入的一个新特性,它允许我们在需要函数对象的地方,使用一种更加简洁的方式定义匿名函数。Lambda表达式通常用于`STL`中的算法、回调函数、事件处理程序等场合。 Lambda表达式的基本语法为: ```c++ Copy Code[capture list](parameter list) mutable exception -> return type { function body } ``` ## `lamdba`表达式在什么场合下使用 C++11 lambda表达式可以用来创建匿名函数,也就是没有函数名的
97 0
|
并行计算 Java 编译器
Lambda 表达式
Lambda 表达式
167 0
Lambda 表达式
|
算法 Python
【Python基础之函数:二分法、三元表达式、生成/推导式、匿名函数、内置函数】
【Python基础之函数:二分法、三元表达式、生成/推导式、匿名函数、内置函数】
117 0
|
Java 编译器
深入理解 Lambda 表达式
Java 8 的 Lambda 表达式已经不再是“新特性”。 现在很多人工作中会使用 Lambda 表达式。 但是,你是否真正理解 Lambda 表达式的底层原理?
405 0
深入理解 Lambda 表达式
|
JavaScript 前端开发 Java
别翻了,Lambda 表达式入门,看这篇就够了(1)
别翻了,Lambda 表达式入门,看这篇就够了
156 0
别翻了,Lambda 表达式入门,看这篇就够了(1)
|
Java 编译器
深入理解Java Lambda 表达式
Java 8 的 Lambda 表达式已经不再是“新特性”。 现在很多人工作中会使用 Lambda 表达式。 但是,你是否真正理解 Lambda 表达式的底层原理?
279 0
深入理解Java  Lambda 表达式
|
设计模式 JavaScript 前端开发
深入探讨 Lambda 表达式(下)
说明: > 由于 Lambda 表达式涉及的周边知识点实在太多,因此拆分为上、下两篇文章讲解。 > > 本篇为下篇,上篇请点击:[深入探讨 Lambda 表达式(上)](https://www.atatech.org/articles/159525) 目录介绍: ![1.png](https://ata2-img.cn-hangzhou.oss-pub.aliyun-inc.co
788 0