文章目录
学习视频来自于:秦疆(遇见狂神说)Bilibili地址
他的自学网站:kuangstudy
生活明朗,万物可爱,人间值得,未来可期
一、Lambda表达式
1.1 函数式编程思想
只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程。
12 Lambda概述
JDK1.8的全新语法,函数式编程,当接口只有一个方法需要实现时,可以用Lambda表达式,代码书写简单易读。
1.3 Lambda格式
(参数类型 参数名称)->{
// 代码主体
}
- 说明
- 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
- -> 是新引入的语法格式,代表指向动作。
- 大括号内的语法与传统方法体要求基本一致。
1.3 Lambda使用
1.3.1 匿名内部类
// 匿名内部类写法
Runnable r = new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 1000; i++) {
System.out.println(Thread.currentThread().getName() + "执行第:" + i);
}
}
};
new Thread(r, "线程一").start();
new Thread(r, "线程二").start();
new Thread(r, "线程三").start();
1.3.2 Lambda
在使用多线程,可以直接实现Runnable接口,因为Runnable是函数式接口。
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
实现
// Lambda写法
Runnable r = () -> {
// 循环1000次
for (int i = 0; i < 1000; i++) {
// 打印线程名和循环次数
System.out.println(Thread.currentThread().getName() + "执行第:" + i);
}
};
// 调用Thread启动线程
new Thread(r, "线程一").start();
// 调用Thread启动线程
new Thread(r, "线程二").start();
// 调用Thread启动线程
new Thread(r, "线程三").start();
1.3.3 参数和返回值
给定一个计算器 Calculator 接口,内含抽象方法 calc 可以将两个int数字相加得到和值:
public interface Calculator {
int calc(int a, int b);
}
在下面的代码中,请使用Lambda的标准格式调用 invokeCalc 方法,完成120和130的相加计算:
public class Demo08InvokeCalc {
public static void main(String[] args) {
// TODO 请在此使用Lambda【标准格式】调用invokeCalc方法来计算120+130的结果ß
}
private static void invokeCalc(int a, int b, Calculator calculator) {
int result = calculator.calc(a, b);
System.out.println("结果是:" + result);
}
}
使用Lambda实现
public static void main(String[] args) {
invokeCalc(120, 130, (int a, int b) ‐> {
return a + b;
});
}
1.3.4 省略写法
- 当实现方法中只有
一行代码
,可以省略 { } 。 - 如果小括号内
有且仅有一个参数
,则小括号可以省略; - 参数类型可以省略,如果有多个参数需要,写法需要保持一致。
// 多个参数
public static void main(String[] args) {
invokeCalc(120, 130, (a, b) ‐> a + b);
}
// 一个参数
public static void main(String[] args) {
invokeCalc(120, 130, a ‐> System.out.println(a));
}
1.4注意
- 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。
- 使用Lambda必须具有上下文推断。也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。
有且仅有一个抽象方法的接口,称为“函数式接口”。