Lamda表达式:

λ希腊字母表中排序第11位的字母,英文名称为Lambda,它Lambda表达式是Java SE 8中一个重要的新特性,允许通过表达式来代替功能接口,它与其他方法相同,提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块),实际上是属于函数式编程的概念

语法如下:

(参数) ->表达式 或 (参数) ->{ 语句; }

Lambda表达式允许你直接把一个代码块赋值给一个变量

无参有返回值Lambda表达式:

() -> 2   //该Lambda表达式表示返回值为2

有参有返回值Lambda表达式:

一个参数:

x -> 2 * x    //x为参数,返回2*x的值

2个参数:

(x, y) -> x + y  //x,y均为参数,返回两者的和

有参无返回值Lambda表达式:

(String s) -> System.out.print(s) //s为参数,将其输出

为什么要使用lambda表达式?

避免匿名内部类定义过多可以让代码看起来很简洁去掉了大量没有意义的代码,只留下核心的逻辑

在讲如何使用Lamda表达式之前,我们先来学习一下FunctionalInterface (函数式接口)

函数式接口:

任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口,对于函数式接口,我们可以通过lambda表达式来创建该接口的对象

举例:

//定义函数式接口
interface mylike{void lambda();
}

JDK1.8新特性,default默认方法可以有具体的实现:

//定义函数式接口
interface mylike{void lambda();default void test2() {System.out.println("我是default默认方法可以有具体的实现");}}

Lambda表达式的推导:

定义函数式接口:

package Lambda;public interface fun_interface {void show();
}

匿名函数的语法:

new 接口/类名(参数1, 参数2...){实现方法1(){}实现方法2(){}......};

匿名函数的方法是:返回值 方法名 参数列表 方法体,我们只需要关心参数列表 方法体,而不用关心方法名和返回值

使用匿名内部类实现该函数式接口:

package Lambda;public class fun_test1 {public static void main(String[] args) {fun_interface fun_interface=new fun_interface(){@Overridepublic void show() {System.out.println("重写函数式接口中的方法");}};fun_interface.show();}
}

在上述代码中,我们没有创建实现类[fun_test1]的实例化对象就实现了具体的show()方法,通常,我们也习惯用匿名内部类的方式创建并启动线程

但是上面的代码还是略显麻烦

Lambda表达式的写法:

package Lambda;
public class lambda_test {public static void main(String[] args) {fun_interface fun_interface=()->System.out.println("重写函数式接口中的方法");fun_interface.show();}
}

无论是匿名内部类还是Lambda表达式都可以正确实现这个接口,但使用匿名内部类,我们会发现在代码量上减少了许多,但其实Lambda表达式的本质就是一个匿名内部类

使用Lambda表达式的前提是:接口为函数式接口

函数式接口的不同类型:

package Lambda;public class fun_test3 {//无返回值无参数interface NoParameterNoReturn {void test();}//无返回值一个参数interface OneParameterNoReturn {void test(int a);}//无返回值多个参数interface MoreParameterNoReturn {void test(int a,int b);}//有返回值无参数interface NoParameterReturn {int test();}//有返回值一个参数interface OneParameterReturn {int test(int a);}//有返回值多参数interface MoreParameterReturn {int test(int a,int b);}}

Lambda表达式与函数式接口的简单应用:

package Lambda;public class fun_lambda {public static void main(String[] args) {//无返回值无参数NoParameterNoReturn parameterNoReturn=()-> System.out.println("这里是重写后的方法");parameterNoReturn.test();//无返回值一个参数//写法1OneParameterNoReturn oneParameterNoReturn=(a)->{System.out.println(a);};oneParameterNoReturn.test(99);//写法2OneParameterNoReturn oneParameterNoReturn1=a->System.out.println(a);//只有一个参数,小括号可以省略;只有一条语句,花括号可以省略oneParameterNoReturn1.test(99);//无返回值多个参数MoreParameterNoReturn moreParameterNoReturn=(a,b)->{System.out.println(a+b);};moreParameterNoReturn.test(99,1);//有返回值无参数NoParameterReturn noParameterReturn=()->{return  520;};int ret=noParameterReturn.test();System.out.println(ret);//有返回值一个参数OneParameterReturn oneParameterReturn=(a)->{return a+1;};int ret1=oneParameterReturn.test(99);System.out.println(ret1);//有返回值多参数MoreParameterReturn moreParameterReturn=(a,b)->a*b;//相当于(a+b)->{return a*b;}int ret2=moreParameterReturn.test(4,8);System.out.println(ret2);}
}
interface NoParameterNoReturn {void test();
}
//无返回值一个参数
interface OneParameterNoReturn {void test(int a);
}
//无返回值多个参数
interface MoreParameterNoReturn {void test(int a,int b);
}
//有返回值无参数
interface NoParameterReturn {int test();
}
//有返回值一个参数
interface OneParameterReturn {int test(int a);
}
//有返回值多参数
interface MoreParameterReturn {int test(int a,int b);
}

输出:

这里是重写后的方法
99
99
100
520
100
32

注:

参数类型可以省略,如果需要省略,每个参数的类型都要省略。参数的小括号里面只有一个参数,那么小括号可以省略如果方法体当中只有一句代码,那么大括号可以省略如果方法体中只有一条语句,其是return语句,那么大括号可以省略,且去掉return关键字

Lambda表达式的优缺点:

优点:

在代码层次上来说,使代码变得非常的简洁,开发迅速
方便函数式编程
非常容易进行并行计算
Java 引入 Lambda,改善了集合操作

缺点:

代码可读性变差
在非并行计算中,很多计算未必有传统的 for 性能要高
不容易进行调

java之Lamda表达式的介绍相关推荐

  1. [Java8] lamda表达式及Stream API一览

    前言 不知道从什么时候开始. Java8开始刮起了一阵妖风. 那就是lamda表达式. 也叫函数式编程, 大概是和隔壁的Scala进行学习吧. 但是Java8也是甲骨文最后一个免费的版本. 大概率, ...

  2. java1.8 lamda表达式

    1.方便匿名内部类的使用 直接使用lamda表达式编写接口的实现 参数为接口抽象方法的入参 后面接着方法的实现 然后就可以作为该接口的对象使用了 2.lamada表达式语法 (parameters) ...

  3. java工作笔记017---java8新特性_使用lamda表达式进行List分组_排序_去重_随时更新

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个电视购物项目后台采用java1.8编写,有些业务复杂的地方,使用lamda表达式可以简化开发 ...

  4. Java回调的四种写法(反射、直接调用、接口调用、Lamda表达式)

    1. 引言 在计算机程序设计中,回调函数,简称回调(Callback),是指通过函数参数传递到其他代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 以上是维基百科对&qu ...

  5. Java --Lamda表达式

    Lamda:属于函数式编程的概念: interface IMessage {public void print() ; } public class TestDemo {public static v ...

  6. java构造函数传参_java 构造函数 , 参数传递 , lamda表达式

    1.  java 子类中必须显式或者隐式的调用父类的构造方法,原因是双亲委派机制.java 在创建一个对象是,会在构造方法中依次向上调用父类的构造方法. 为了找到父类的构造方法,所以子类应显式或者隐式 ...

  7. Java SE 8新功能介绍:使用Streams API处理集合

    使用Java SE 8 Streams的代码更干净,易读且功能强大..... 在" Java SE 8新功能介绍"系列的这篇文章中,我们将深入解释和探索代码,以了解如何使用流遍历集 ...

  8. 10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里.在J ...

  9. Java代码缺陷自动分析工具介绍

    Java代码缺陷自动分析工具介绍                                                                                     ...

最新文章

  1. Python+OpenCV 图像处理系列(8)—— Numpy 对象及图像对象创建与赋值
  2. js和html邮箱注册的正则,js邮箱正则表达式
  3. Keras搭建YoloV4目标检测平台
  4. VMware Workstation 14 激活码
  5. WSAENOBUFS: No buffer space available in SAP
  6. 天翼云从业认证课后习题(3.5云安全产品)
  7. Redis 6.0 新特性 ACL 介绍
  8. 企业员工工资管理系统
  9. oracle数据倾斜优化,Hive数据倾斜优化 - ericquan8的个人页面 - OSCHINA - 中文开源技术交流社区...
  10. consul运维入门
  11. hdu 6088 Rikka with Rock-paper-scissors (2017 多校第五场 1004) 【组合数学 + 数论 + 模意义下的FFT】...
  12. 【图像增强】基于matlab同态增晰图像增强【含Matlab源码 962期】
  13. 中国大学MOOC 程序设计入门——C语言 翁凯 编程测试题汇总
  14. jsmy97时间控件,时间范围选择
  15. 利用gretna计算小世界网络属性等图论指标笔记
  16. kubectl rollout restart重启pod
  17. ofo 上海深圳等公司相继注销
  18. 利用Cam对Hopenet网络模型进行可视化
  19. pdf转word免费的软件,总有一款适合你的
  20. 如何提取到网页上播放的视频

热门文章

  1. linux 下查看文件属性的命令
  2. addr2line 输出为?:0可能原因
  3. 【刷题】美国节日、蔡勒公式(一个推算周几的计算公式)
  4. 职场10个受欢迎的英文名
  5. Flex启动事件的执行顺序
  6. 2022年7月(软考高级)信息系统项目管理师认证招生简章
  7. 常见的数据质量问题有哪些
  8. 如何修改blog昵称
  9. 银时之魂服务器端文件,银时之魂电脑版 银时之魂PC版安装教程
  10. MySQL · 引擎特性 · DROP TABLE之binlog解析