JDK8的新特性 —— LambdaExpress
前言
LambdaExpress 是JDK8 加进去的,到目前为止各大厂都在广泛使用,它有着很强的优势:速度更快;代码更少;强大的流式API;便于并行。
一、LambdaExpress 是什么?
-
基本概念 本质上它是一个匿名方法,即没有函数名的函数。 它是基于数学中的λ演算得名。 它的核心思想是将面向对象中的传递数据变成传递行为。 它可以表示闭包(此处要和数学传统意义上的闭包进行区分)。 规则 一定得是函数式接口。 接口中只能有一个方法。
二、使用方法
1.使用口诀
-
拷贝小括号 写死右箭头 落地大括号
2.代码实例
1) 无返回值,无参数:
接口:Person
package com.juc.study.iServer; /** * 接口 —— 人 */ public interface Person { /** * 只有这一个说的方法 */ public void say(); }
测试代码:
import com.juc.study.iServer.Person; import org.junit.Test; public class TestJucStudy { @Test public void testLambdaExpress() { Person p = () -> { System.out.println("你好!!!");}; p.say(); } }
执行结果:
你好!!!
2) 有参、有返回值
接口:Person
package com.juc.study.iServer; /** * 接口 —— 人 */ public interface Person { /** * 两个学科的总成绩 * @param i * @param y * @return */ public int totalScore(int i, int y); }
测试代码:
import com.juc.study.iServer.Person; import org.junit.Test; public class TestJucStudy { @Test public void testLambdaExpress() { Person p = (int x, int y) -> { return x + y;}; System.out.println(p.totalScore(90, 99)); } }
执行结果:
189
3、如何确保接口是函数式接口
-
在接口上添加注解 @FunctionalInterface 。 如果接口中只有一个方法,JDK8 会在此接口上自动加上@FunctionalInterface ,俗称隐式定义。 如果接口中的方法超过一个,那JDK8就会认为它是一个普通的标准接口。 如果想强制让其成为函数式接口,就可以在接口上添加@FunctionalInterface 注解,当接口中添加了多个方法时就会报错。 JDK8里允许有一部分方法的实现,代码如下:
接口: Person
package com.juc.study.iServer; /** * 接口 —— 人 */ @FunctionalInterface public interface Person { /** * 两个学科的总成绩 * @param i * @param y * @return */ public int totalScore(int i, int y); /** * 使用default关键字可以在接口中实现方法,也不会影响函数式接口的定义 */ public default void say() { System.out.println("Hello JAVA 8"); } /** * 静态方法 */ public static void attr() { System.out.println("基本属性"); } }
测试代码:
import com.juc.study.iServer.Person; import org.junit.Test; public class TestJucStudy { @Test public void testLambdaExpress() { Person p = (int x, int y) -> { return x + y;}; System.out.println(p.totalScore(90, 99)); p.say(); Person.attr(); } }
执行结果:
189 Hello JAVA 8 基本属性
使用default关键字可以在接口中实现方法,也不会影响函数式接口的定义,并且可以有多个; 也可以定义多个static 方法 。
三、总结
以上内容就是Lambda表达式的基本知识和用法,有兴趣的同学可以继续深入研究。