参考①:JDK已有函数函数式接口介绍
Java 8 函数式接口 | 菜鸟教程 (runoob.com)
参考②:Java之线程池和Lambda表达式 - 我想回家 - 博客园 (cnblogs.com)
lambda体现的是一种函数式编程的思想, 它强调的是做什么,而不是以什么形式做。
使用前提
线程创建
使用Lambda简化前
实现Runnable接口的匿名内部类的实现:
public class Demo01Runnable {
public static void main(String[] args) {
// 匿名内部类
Runnable task = new Runnable() {
@Override
public void run() { // 覆盖重写抽象方法
System.out.println("多线程任务执行!");
}
};
new Thread(task).start(); // 启动线程
}
}
代码分析
-
Thread 类需要Runnable 接口作为参数,其中的抽象run 方法是用来指定线程任务内容的核心;
-
为了指定run 的方法体,不得不需要Runnable 接口的实现类;
-
为了省去定义一个RunnableImpl 实现类的麻烦,不得不使用匿名内部类;
-
必须覆盖重写抽象run 方法,所以方法名称、方法参数、方法返回值不得不再写一遍,且不能写错;
-
而实际上,似乎只有方法体才是关键所在。
使用Lambda简化后
public class Demo01Runnable {
public static void main(String[] args) {
new Thread(()->System.out.println("多线程任务执行!")).start(); // 启动线程
}
}
集合排序比较器
// 创建数组
Integer[] arr = {1,8,3,4,9,2,5};
// 匿名内部类实现数组升序排序
Arrays.sort(arr,new Comparator<Integer>(){
//使用Lambda简化前
@Override
public int compare(Integer o1, Integer o2) {
return 0;
}
});
//使用Lambda简化数组的升序排序
Arrays.sort(arr,( a, b)->{ return a - b ;});
Lambda表达式的省略规则
在Lambda标准格式的基础上,使用省略写法的规则为:
-
小括号内参数的类型可以省略;
-
如果小括号内有且仅有一个参,则小括号可以省略;
-
如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
虽然有省略写法,但是我感觉这个有点灵活,所以不建议省略,因为代码是给别人看的,省略的话感觉别人看起来会有点费劲.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)