前言
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表达式的基本知识和用法,有兴趣的同学可以继续深入研究。