java新特性之lambda表达式
嘿,大家好!今天咱们聊聊Java中那位“代码减肥大师”——lambda表达式。简单概括,这是一位能让你的代码看起来更加苗条、性感的小能手。它就像是给代码穿上了“语法糖衣”,让你在写着写着的时候,突然觉得自己像个高级码农。
那么,lambda到底是个啥呢?简单概括,它是一种简洁的代码写法,让咱们可以少写点重复的代码,多些优雅的表达。比如说,以前我们要创建一个线程,得写好多行,现在用lambda,几行代码就能搞定了。是不是很酷?
不过,lambda也不是万能的。它只能在那些“函数式接口”(只有一个抽象方法的接口)中使用。要是你的接口有多余一个的方法,那它就没办法使唤了。这点要记住哦!
还有一点,虽然lambda会让代码看起来更简洁,但有时候它也会让你的代码变得有点难读。所以,别为了简短而滥用它,得在简洁和可读性之间找平衡哦!
总之,lambda表达式是个不错的工具,学会它,让你的代码更有韵味!对了,要是对函数式编程感兴趣,不妨多研究研究Stream和方法引用,可能会发现新的乐趣呢!
目录
一、什么是lambda表达式
二、lambda表达式的格式以及转换思维过程
1、标准格式
2、省略格式
3、lambda表达式的演进过程
三、lambda表达式的条件
四、lambda表达式的案例
一、什么是lambda表达式
按照我个人理解,lambda表达式实际上就是java1.8以后,提供的一种简化固式代码的书写形式。是一种函数式编程思想,强调做什么什么?而不是怎么做?
正所谓,凡事具有两面性,其有优点,那么可它可能也会有缺点。lambda表达式,在一定程度上简化了代码的写法,但是也模糊化了代码的内部结构,从而在阅读理解上会稍微变得困难。不过这也是一个熟悉的过程,一旦习惯了,可以少写很多重复的代码。
不管是lambda表达式,还是新特性中的方法引用、Stream都是简化代码写法的一种方式,我们在遇到可以简化的方法时进行简化,但是如果简化不了,不可强行简化。
二、lambda表达式的格式以及转换思维过程
1、标准格式
(参数类型 参数名称) -> { 代码语句 } |
格式说明:
- 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
- ->是新引入的语法格式,代表指向动作。
- 大括号内的语法与传统方法体要求基本一致。
2、省略格式
1. 小括号内参数的类型可以省略;
2. 如果小括号内有且仅有一个参,则小括号可以省略;
3. 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
参数 -> 代码语句 |
3、lambda表达式的演进过程
我们以创建新的运行线程为例来写阐述演进过程。
A、传统写法:
public static void main(String[] args) { Thread t = new Thread(new Runnable() { t.start(); } |
B、标准写法
public static void main(String[] args) { Thread t = new Thread(() ->{System.out.println("运行了一个新线程");}); } |
C、简化写法
public static void main(String[] args) { Thread t = new Thread(() ->System.out.println("运行了一个新线程")); } |
三、lambda表达式的条件
Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意:
- 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。
- 无论是JDK内置的Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。
- 使用Lambda必须具有上下文推断。
- 也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。
备注:有且仅有一个抽象方法的接口,称为“函数式接口”。
如下是Runnable的接口,满足上述要求:
四、lambda表达式的案例
除了上面讲的Runnable案例,我们再举例一个数组排序的例子。
A、传统写法
|