一、Lambda表达式概念
Lambda表达式是java8
中引入的新的编码方法,其质属于 “函数式编程 ” 的概念,主要目的是简化代码,与匿名内部类关系密切,可使用Lambda语法来代替匿名内部类,当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。
因此,理解
函数式接口
是java8 Lamdba表达式的关键所在。
1.函数式接口
定义: 任何接口,如果只包含一个抽象方法,那么他就是一个函数式接口。
(例如用于创建线程的Runnable接口,只有一个抽象方法)
class interface Runnable{
public abstract void run();
}
对于函数式接口,我们就可以用Lambda表达式来创建它的对象。
二、为什么要用Lambda表达式
- 避免匿名内部类定义过多;
- 让代码更加简洁;
- 除去没有意义的代码,只留下核心逻辑。
三、Lambda表达式具体用法 ★
语法格式:
(参数)->语句(方法体);
1. 不需要参数,返回值为 5
() -> 5
2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
下面是Lambda表达式使用具体实例:
- 首先我们
定义一个函数式接口——Myinterface
(只有一个run方法)
创建Myclass类
来实现Myinterface接口
没有使用Lambda的老方法:
(我们在主函数中创建实现类对象 i,并通过i来调用run方法)
使用Lambda表达式语法后:
四、Lambda表达式简化匿名内部类
其中:
Ilike为函数式接口名
lambda为接口中唯一的抽象方法
like为实现类的对象名
五、使用Lambda表达式实现Runnable接口创建线程
传统方法:
package bookTest;
class Runnable1 implements Runnable {
//重写run方法
public void run() {
//获取此线程名称
System.out.println("线程1:"+Thread.currentThread().getName());
}
}
public class RunnableDemo {
public static void main(String[] args) {
//创建对象并启动线程
Runnable1 r1 = new Runnable1();
Thread t1 = new Thread(r1);
t1.start();
}
}
进一步简化代码(使用内部匿名类)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
package bookTest;
public class RunnableDemo {
public static void main(String[] args) {
//使用内部匿名类简化代码
Thread t1 = new Thread(new Runnable() {
//重写run方法
public void run() {
System.out.println("线程1:"+Thread.currentThread().getName());
}
});
t1.start();
}
}
再进一步简化代码(使用Lambda表达式)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
package bookTest;
public class RunnableDemo {
public static void main(String[] args) {
//使用Lambda简化代码
Thread t1 = new Thread( ()->
System.out.println("线程1:"+Thread.currentThread().getName()));
t1.start();
}
}
转载:https://blog.csdn.net/qq_47354826/article/details/116806640