【JDK 8-Lambda】3.1 Java高级核心玩转 JDK8 Lambda 表达式
一、 什么是函数式编程 ?
-
将一个函数(也称“行为”)作为一个参数进行传递
-
面向对象编程是对数据的抽象(各种各样的POJO类),而函数式编程则是对行为的抽象 (将行为作为一个参数进行传递)
-
支持版本:JDK 8 及以上
二、 什么是lambda表达式?
1. 先看两个示例
A.【创建线程】
-
jdk8之前
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("【创建线程】jdk8之前");
}
}).start();
-
jdk8之后 Lambda表达式
new Thread(()-> System.out.println("【创建线程】jdk8之后 Lambda表达式")).start();
B.【数组排序-降序】
-
jdk8之前
List<String> list = Arrays.asList("aaa", "bbb", "ccc", "ddd");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println("jdk8之前写法:升序》");
for (String s : list) {
System.out.println( s);
}
-
jdk8之后 Lambda表达式
Collections.sort(list, (a, b) -> b.compareTo(a));
System.out.println("jdk8之后lambda写法:降序》");
for (String s : list) {
System.out.println(s);
}
2. lambda表达式特性
A. 使用场景(前提):
-
一个接口中只包含一个方法,则可以使用Lambda表达式
-
这样的接口称之为"函数接口"
B. 语法
(params) -> expression
-
第一部分为括号内用 逗号分隔的形式参数,参数是函数式接口里面方法的参数
-
第二部分为一个箭头符号:->;
-
第三部分为 方法体,可以是表达式和代码块
C. 参数列表
-
括号中参数列表的数据类型可以省略不写
-
括号中的参数只有一个,那么参数类型和()都可以省略不写
D. 方法体
-
如果{}中的代码只有一行,无论有返回值,可以省略 {},return,分号
-
{},return,分号 要一起省略
//两种写法等效
Collections.sort(list, (a, b) -> b.compareTo(a));
Collections.sort(list, (a, b) -> {
return b.compareTo(a);
});
F. 好处
-
Lambda 表达式的实现方式在本质是以匿名内部类的方式进行实现
-
重构现有髓肿代码,更高的开发效率,尤其是集合Collection操作
分类:
架构师之路-java
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战