网站首页 > 基础教程 正文
今天起,我们来学习Java开发工程师必备技能之『函数式编程』——Lambda表达式。
现在很多小伙伴进入公司或者看到别人代码都在使用函数式编程方式了,代码又简单看得逼格又高。
我们知道JDK8是Java一个重要的更新版本,更新了很多的特性,例如:新增了日期操作类、接口增加静态和默认方法、Lambda 表达式、函数式接口、多重注解、Stream类、Optional空指针处理类等等的特性,而函数式编程就是其中重要的特性,这篇我们先来了解下Lambda 表达式。
Lambda 表达式的引入
回想下我们在学习Java基础的时候,对于如何对接口进行实例化,其中一种方式就是使用匿名内部类的方式了,这样的好处就是不需要我们再定义一个class类实现接口然后重写抽象方法之后去创建class类才能得到接口实例,节省了代码。
如下代码:
|
而Lambda 就是简化它而来的。
1.Lambda 表达式的介绍
Lambda 表达式又称为匿名函数即没有函数名的函数,它的主要目的呢是对接口匿名实现类的一个简化。使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。
Lambda 是一个闭包函数,所谓闭包就是指是能够读取其他函数内部变量的函数。例如:A、B两个函数,A函数可以读取到B函数里面的变量,这就是闭包,而通常函数只有内部才能互相访问,所以闭包可以理解为“定义在一个函数内部的函数”。而这个闭包就是函数式编程的思想所在了。
Lambda表达式能够简化的接口中只能有一个抽象方法。这也是我们后面要提到的函数式接口。
2.Lambda 表达式的语法
(paramters) -> {expression};
格式说明:
l (paramters) :表示调用接口的方法。使用有如下特点:
① 如果有参数那么不需要写参数类型,编译器可以统一识别参数值。
例如: (a):表示接口的抽象方法只有一个参数。
(a,b):表示接口的抽象方法有两个参数。
② 如果参数只有一个参数那么()可以省略不写。
l -> :分隔符;
l {} :表示要重写的方法实现,使用有如下特点:
① 如果只有一行代码那么{}也可以省略不写
② 当只有一行代码的时候如果方法有返回值可以不写 return;编译器会自动返回值。
3.Lambda 表达式的使用
|
Lambda表达式访问外部局部变量问题:
因为Lambda表达式的本质是简化匿名内部类,所以如果想要在Lambda表达式里面访问外部变量的话,外面的局部变量的话必须是final类型的,在JDK1.8之后访问的局部变量可以省略final不写,但是依然是常量不能修改。
例如:
如果对s变量进行修改就不允许:
【未完待续...】
- 上一篇: 玩转java8 lambda表达式三之对象方法引用
- 下一篇: JavaGUI——Java图形用户界面
猜你喜欢
- 2024-11-30 玩转java8 lambda表达式三之对象方法引用
- 2024-11-30 Java 中的 Supplier:让数据生成更灵活
- 2024-11-30 Java 中的 Predicate:让判断逻辑更清晰灵活
- 2024-11-30 Java8精华-函数式编程(一)读完这篇,你将彻底理解
- 2024-11-30 你知道实现一个JAVA接口有几种方式吗?配合lambda更加意想不到
- 2024-11-30 java8精华-函数式编程-Predicate(四)
- 2024-11-30 巧妙应用 Java 的 Functional Interface:让代码更简洁、更灵活
- 2024-11-30 函数式接口编程真没那么难,简单几行让你的代码更优雅
- 2024-11-30 初窥函数式接口,不会取标题,没有噱头,全是干货
- 2024-11-30 JDK8新特性:函数式接口@FunctionalInterface
- 最近发表
-
- 在使用Bootstrap吗?快来看看如何使用 Bootswatch 主题吧
- 50个HTML5免费的Bootstrap模板 :下
- 定制你的bootstrap之--修改less文件1
- BootstrapBlazor :使用 .NET 生成交互式客户端 Web UI 的框架
- React与使用Bootstrap5模态框的注意事项
- 如何引用bootstrap没有的字体图标
- 10个超酷炫Bootstrap HTML & CSS UI工具包
- Bootstrap自举电路工作原理讲解(自举电路的原理)
- 为何 BootstrapVue 能成为 Vue 前端框架顶流?
- 新增 创意布局企业网络服务CSS模板 bootstrap 模板
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)