浅析Java8新特性Lambda表达式和函数式接口
发布时间 - 2026-01-11 02:37:05 点击率:次什么是Lambda表达式,java8为什么使用Lambda表达式?

“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。我们可以把 Lambda表达式理解为是 一段可以传递的代码。最直观的是使用Lambda表达式之后不用再写大量的匿名内部类,简化代码,提高了代码的可读性。
// 启动一个线程,不使用Lambda表达式
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("启动一个线程");
}
}).start();
//使用Lambda表达式,只需要一行代码
new Thread(() -> System.out.println("启动一个线程")).start();
Lambda表达式的基本语法和格式
基本语法
- java8中引入了新的操作符”->”,称为箭头操作符或者lambda操作符,箭头操作符将lambda拆分为两部分,左侧:lambda表达式的参数列表,右侧:lambda表达式中的所需要执行的的功能(接口实现的功能代码)。
- lambda表达式需要“函数式接口”的支持,接口中只有一个抽象方法的接口称为函数式接口,可以使用注解@FunctionalInterface检查接口是否是函数式接口。
- lambda表达式的参数列表的数据类型可以省略不写,因为jvm编辑器可以通过上下文判断。
- 基本格式
① 无参数,无返回值。( ) -> System.out.println(“hello”)
// 实现Runnable接口(无参,无返回)
Runnable r = () -> System.out.println("hello lambda");
② 一个参数(小括号可以省略不写,习惯上加上小括号),无返回值。(x) -> System.out.println(x)
//Consumer接口(一个参数,无返回值),之后会提到
//第一种,小括号不省略
Consumer<String> c = (x) -> System.out.print(x);
c.accept("hello");
//小括号省略
Consumer<String> c1 = x -> System.out.print(x);
c1.accept("hello")
③ 有多个参数,并且lambda有多条语句,则lambda语句必须用大括号括起来并有return返回(若有一条语句则可以省略大括号和return),有返回值。(x,y) ->{System.out.println(“hello”);return Integer.compare(x, y);};
//Comparator接口
//多条语句
Comparator<Integer> comparator = (x,y) ->{
System.out.println("hello");
return Integer.compare(x, y);
};
//一条语句
Comparator<Integer> comparator2 = (x,y) -> Integer.compare(x, y);
System.out.println(comparator2.compare(23, 22));
还有其他的一些格式都是大同小异,这里就不再了解。
函数式接口是什么?
在前面也提到了函数接口,那么函数接口到底是什么呢?是个接口,只包含一个抽象方法,那么它就是函数式接口,我们可以在任意函数式接口上使用 @FunctionalInterface 检查它是否是一个函数式接口。
函数式接口里是可以包含默认方法、静态方法,他们不是抽象方法;也可以包含Java.lang.Object里的public方法,因为任何一个类都继承Object类,包含了来自java.lang.Object里对这些抽象方法的实现,也不属于抽象方法;函数式接口里允许子接口继承多个父接口,但每个父接口中都只能存在一个抽象方法,且必须的相同的抽象方法。
Java8内置函数式接口
四大核心函数式接口
| 函数式接口 | 方法 | 参数类型 | 返回类型 | 作用 |
|---|---|---|---|---|
| Consumer<T> 消费型接口 | void accept(T t) | T | void | 对T类型的参数进行操作 |
| Supplier<T> 供给型接口 | T get() | 无 | T | 操作数据,返回T类型的结果 |
| Function<T, R> 函数型接口 | R apply(T t) | T | R | 对T类型参数进行操作,并返回R类型的结果 |
| Predicate<T> 断定型接口 | boolean test(T t) | T | boolean | 确定T类型参数是否满足某约束,并返回boolean值 |
//Consumer<T> 消费型接口
@Test
public void test1(){
Consumer<String> c = (x) -> System.out.println("hello:"+x+"!");
c.accept("Java");
}
// Supplier<T> 供给型接口
@Test
public void test2(){
Supplier<String> s = () -> "hello,beautiful girl";
String str = s.get();
System.out.println(str);
}
//Function<T,R> 函数性接口
@Test
public void test3(){
Function<String, Integer> f= (x) -> x.length();
Integer len = f.apply("hello");
System.out.println(len);
}
//Predicate<T> 断言型接口
@Test
public void test4(){
Predicate<String> p = (x) -> x.length()>5;
boolean b = p.test("hello Java");
System.out.println(b);
}
其它函数式接口
| 函数式接口 | 方法 | 参数类型 | 返回类型 | 作用 |
|---|---|---|---|---|
| BiFunction<T , U, R > | R apply(T t, U u) | T, U | R | 对 T, U 类型的参数进行操作,并返回R类型的结果 |
| UnaryOperator<T> (Function 子接口) | T apply(T t) | T | T | 对 T类型的参数进行一元运算,并返回R对象的结果 |
| BinaryOperato<T,R> (BiFunction 子接口) ) | T apply(T t1, T t2 | T, T | T | 对T类型的参数进行二元运算,并返回T类型的结果 |
| BiConsumer<T, U> | void accept(T t, U u) | T, U | void | 对T,作 |
| ToIntToIntFunction<T> ToLongFunction<T> ToDoubleFunction<T> | int(long,double) applyAsInt(T value) | T | int, long, double | 计 算 int 、 long 、double值的函数 |
| IntFunction<R> LongFunction<R> DoubleFunction<R> | R apply(int(long,double) value) | int, long, double | R | 参数分别为int、long、double 类型的函数 |
总结
以上所述是小编给大家介绍的Java8新特性Lambda表达式和函数式接口,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# java8新特征
# lambda表达式
# 一文带你掌握Java8中Lambda表达式 函数式接口及方法构造器数组的引用
# Java8函数式接口java.util.function速查大全
# Java8简单了解Lambda表达式与函数式接口
# 实例详解Java8函数式接口
# 基于Java8 函数式接口理解及测试
# Java 8函数式接口之BinaryOperator使用示例详解
# 是一个
# 返回值
# 多个
# 我们可以
# 小编
# 多条
# 不写
# 的是
# 都是
# 是个
# 也不
# 在此
# 其他的
# 可以通过
# 给大家
# 只有一个
# 大同小异
# 只需要
# 分别为
# 可以使用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
JavaScript如何实现路由_前端路由原理是什么
北京企业网站设计制作公司,北京铁路集团官方网站?
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
海南网站制作公司有哪些,海口网是哪家的?
如何安全更换建站之星模板并保留数据?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何在香港免费服务器上快速搭建网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Laravel如何实现API资源集合?(Resource Collection教程)
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
js代码实现下拉菜单【推荐】
网站制作价目表怎么做,珍爱网婚介费用多少?
制作企业网站建设方案,怎样建设一个公司网站?
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
用v-html解决Vue.js渲染中html标签不被解析的问题
网站制作免费,什么网站能看正片电影?
文字头像制作网站推荐软件,醒图能自动配文字吗?
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
Laravel如何自定义分页视图?(Pagination示例)
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
企业网站制作这些问题要关注
Laravel如何使用Gate和Policy进行授权?(权限控制)
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Swift开发中switch语句值绑定模式
Python并发异常传播_错误处理解析【教程】
如何快速上传建站程序避免常见错误?
nginx修改上传文件大小限制的方法
怎样使用JSON进行数据交换_它有什么限制
如何在IIS中新建站点并解决端口绑定冲突?
如何做网站制作流程,*游戏网站怎么搭建?
微信小程序 五星评分(包括半颗星评分)实例代码
JavaScript如何实现类型判断_typeof和instanceof有什么区别
如何彻底卸载建站之星软件?
如何在万网开始建站?分步指南解析
Laravel怎么使用artisan命令缓存配置和视图
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
Android仿QQ列表左滑删除操作
使用C语言编写圣诞表白程序

