前言
本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家点赞转发支持一下!
本文是为了后续的学习内容做铺垫,但是也不能放松警惕,也要好好学。
Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda expression),基于数学中的λ演算得名,也可称为闭包(Closure) 。
在学习Lambda表达式前要先了解下函数式接口。
一、函数式接口
函数式接口定义:一个接口有且只有一个抽象方法 。
java的提供的集合中就有一些集合包含函数式接口,下面详细讲。
这里先讲解如何自定义类
//函数式接口与普通接口的唯一区别就在于 //只能有一个抽象方法 @FunctionalInterface //这个标识就是函数式接口的标志 interface Demo { //注意只能有一个抽象方法 void test(); } 1234567891011
再次强度, 只能有一个抽象方法
【注意】
1️⃣如果一个接口只有一个抽象方法(可以存在其他被default修饰的方法),那么该接口就是一个函数式接口
2️⃣如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口中只有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。
二、Lambda表达式语法
基本语法: (parameters) -> expression 或 (parameters) -> { statements; }
Lambda表达式由三部分组成:
1️⃣ (parameters) 是函数式接口里的抽象方法的参数列表。(参数列表的类型在一些规则下可以省略)。
2️⃣ ->可理解为“被用于”的意思。
3️⃣expression 或 (parameters) -> { statements; } 等同于抽象方法的方法体。(方法体在一定的规则下可以省略 ‘{}’ )
所以可以理解为,
该参数列表((parameters))被用于(->) 该方法体 (expression 或 (parameters) -> { statements; })
三、Lambda表达式的基本使用
//无返回值无参数 @FunctionalInterface interface NoParameterNoReturn { void test(); } public class Lambda { public static void main(String[] args) { NoParameterNoReturn lamdba = ()->System.out.println("无参数无return的Lambda表达式"); lamdba.test();//控制台输出 "无参数无return的Lambda表达式" 123456789101112