当前位置: 首页 > 科技 > 人工智能 > Lambda表达式,真爽!_腾讯新闻

Lambda表达式,真爽!_腾讯新闻

天乐
2020-08-22 22:42:33 第一视角

# 简介

JDK的升级的目的有以下几个:增加新的功能、修复bug、性能优化、简化代码等几个方面,Lambda表达式就是属于简化代码,用于简化匿名实现类,提供一种更加简洁的写法。Lambda表达式在Swift语言中称之为代码块,Lambda表达式可以认为是一种特殊的接口,该接口必须只有一个抽象方法。

语法

小括号()中的内容就是方法中的参数列表包括参数类型、参数名,其中参数类型是可以省略的,当参数个数只有一个时也可以省略掉小括号;

花括号{}中的内容就是方法中的方法体,当方法体中只有一行代码时可以省略{},当方法体中只有一行代码并且需要返回值时也可以省略掉return;

由于Lambda表达式是匿名实现类的简写,是一种特殊的接口,当赋值给一个变量时也少不掉分号;

Lambda表达式的作用

简化匿名实现类的书写

作为函数中的参数来传递

# 示例

示例1:两个参数,一个返回值

IHello 一个很普通的接口,但接口中只能有一个抽象方法

Main

示例2:一个参数,一个返回值

Main

示例3:没有参数,没有返回值

main

从这三个示例中我们发现我们只定义了接口,并没有定义实现类,而是通过Lambda表达式来代替了实现类。

注意:Lambda接口只能有一个抽象方法,可以同时拥有多个静态方法和默认方法。

示例4:Lambda表达式参数

示例5:集合排序示例

# 函数式接口@FunctionalInterface

从我们自定义的IHello示例来看,Lambda表达式其实是一种接口类型的数据类型,严格的说Lambda表达式的数据类型是:函数式接口,是一种特殊的接口,该接口使用@FunctionalInterface注解来标记(不是必须的,可以不用该注解标记,IHello接口就没有使用该注解标记, ),并且接口中只能有一个抽象方法,可以有多个静态方法或者默认方法, 每一个该类型的lambda表达式都会被匹配到这个抽象方法。

@FunctionalInterface: 该注解没啥太大含义,该注解是给编译器做检查使用的,如果使用了该注解,编译器就会检查该接口中的抽象方法是不是只有一个,如果有多个就会报错:在接口Xxx中找到多个非覆盖抽象方法

我们完善一下我们的IHello, 使用@FunctionalInterface注解

我们可以将lambda表达式当作任意只包含一个抽象方法的接口类型,也就是说我们的IHello接口无论叫什么名字,接口中的方法无论叫什么名字都无所谓(只是可读性更好些),因此可以再进行抽象化一下,JDK1.8中提供了这样的函数式接口,我们也不需要再定义IHello接口了,JDK1.8中提供了Supplier、Consumer、Function、BiFunction,这几个是比较常用的

# Supplier供应商:没有参数,有返回值

# Consumer消费者:只有一个参数,没有返回值

# Function函数:一个参数,一个返回值

# BiFunction二元函数:两个参数,一个返回值

# Comparator比较器:接收两个参数,返回比较的结果

使用以上四大函数式接口来取代自定义的接口IHello

# Predicate断言 谓词: 用于测试一个条件的真假

Main

作者: 泡代码的小二黑

来源:https://urlify.cn/NnIJ73

提示:支持键盘“← →”键翻页
为你推荐
加载更多
意见反馈
返回顶部