Lambda表达式。
函数式编程思想:
面向对象思想:做一件事,先找能解决这件事的对象,然后调用该对象相应方法。
面向过程思想:只要能获取到结果,怎么做的不重要,重视结果,不重视过程。
冗余的代码:
public static void main(string[] args) { new thread(new runnable() { @override public void run() { system.out.println("新线程:"+ thread.currentthread().getname()); } }).start(); }
对于runnable的匿名内部类用法可以分析出:
0、thread类需要runnable接口作为参数,其中run()为核心代码。
1、为了指定run()方法体,就必须使用runnable接口的实现类。
2、为了简化代码,可以用匿名内部类,但run()的方法名称,参数,返回值等也必须再写一遍
3、而实际上,只有run()方法体才是关键所在。
编程思想转化:做什么,而不是怎么做。
其实我们并不希望创建一个匿名内部类对象,只是不得不创建,我们真正希望做的事是:将run方法体的代码传给thread类。
lambda表达式:
jdk 1.8 新特性。
格式: 0、一些参数 1、一个箭头 2、一段代码。
(参数列表)->{ 重写方法的代码};
参数列表: 抽象方法的参数列表,有就写,没有就空着。
->: 传递,把参数传递给方法体。
{}: 重写抽象方法的方法体。
public static void main(string[] args) { new thread(()->{ system.out.println("创建新线程:"+thread.currentthread().getname()); }).start(); }
简化lambda表达式:
lambda表达式是可推导,可省略。
0、(参数列表):数据类型可省略。
1、(参数列表):只有一个参数,()也可省略。
2、{代码} :只有一行,无论是否有返回值,{} ,return,分号 都可省略(要省略{},return
和分号必须一起省略。
lambda的使用前提:
0、使用lambda必须有接口,且要求接口只有一个抽象方法。
1、使用lambda必须具有上下文推断,方法的参数或局部变量类型必须为lambda对应的接口类型
有且只有一个抽象方法的接口 称为 【 函数式接口 】。
下一篇: [TJOI2019] 甲苯先生的线段树