龙空技术网

Java学习:Lambda表达式

菜鸟传奇 181

前言:

现在各位老铁们对“java传奇”大体比较关注,大家都需要剖析一些“java传奇”的相关内容。那么小编在网络上网罗了一些有关“java传奇””的相关资讯,希望姐妹们能喜欢,你们一起来了解一下吧!

Lambda表达式

函数式编程思想概述

---强调做什么,而不是以什么形式做

面向对象的思想:

做一件事情,找一个能解决这个的事情的对象,调用对象的方法,完成事情

函数式编程思想

只要能获取到结果,谁去做的,这么做的都不重要,重视的是结果,不重视过程传统写法和Lambda写法对比

传统写法

public class CaiNiao{ public static void main(String[] args){ //匿名内部类,实现多线程 //Runnable task = new Runnable() Runnable task = new Runnable(){ @Override public void run(){//覆盖重写抽象方法 System.out.println(Thread.currentThread().getName()+"新线程创建了"); System.out.println("多线程任务执行!");  } }; new Thread(task).start();//开启线程  } }

匿名内部类的好处与弊端

一方面,匿名内部类可以帮助我们省去实现类的定义;另一方面,匿名内部类的语法确实太复杂了

public class CaiNiao{ public static void main(String[] args){ //匿名内部类,实现多线程 //Runnable task = new Runnable() new Thread(new Runnable(){ @Override public void run(){//覆盖重写抽象方法 System.out.println(Thread.currentThread().getName()+"新线程创建了"); System.out.println("多线程任务执行!"); } }).start();//开启线程  } }

Lambda写法

()->{}

public class CaiNiao{ public static void main(String[] args){ //匿名内部类,实现多线程 //Runnable task = new Runnable() new Thread(()->{//覆盖重写抽象方法 System.out.println(Thread.currentThread().getName()+"新线程创建了"); System.out.println("多线程任务执行!"); } ).start();//开启线程  } }
Lambda表达式的标准格式

由三部分组成:

一些参数一个箭头一段代码

格式:

(参数列表)-> {一些重写方法的代码}:

解释说明格式:

():接口中抽象方法的参数列表,没有参数,就空着->:传递的意思,把参数传递给方法体{}{}:重写接口的抽象方法的方法体

Lambda表达式:是可推导,可以省略

凡是根据上下文推导出来的内容,都可以省略书写

可以省略的内容:

(参数列表):括号中的参数列表的数据类型,可以省略不写(参数列表):括号中的参数如果只有一个,那么类型和()都可以省略(一些代码):如果()中的代码只有一行,无论是否由返回值,都可以省略({},return,分号)

注意:要省略{},return,分号必须一起省略

JDK1.7 版本之前,创建集合对象必须把前后的泛型都写上JDK1.7 版本之后,=号后边的泛型可以省略,后边的泛型可以根据前边的泛型推导出来

 new Thread(()->{//覆盖重写抽象方法 System.out.println(Thread.currentThread().getName()+"新线程创建了"); }).start();//开启线程  new Thread(()->System.out.println(Thread.currentThread().getName()+"新线程创建了")).start();//开启线程
Lambda的使用前提使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法;使用Lambda必须具有上下文推断。

备注:有且仅有一个抽象方法的接口,成为“函数式接口”。

标签: #java传奇