本文主旨在说明使用lambda 表达式的缘由和 lambda 表达式 如何使用
前言
本篇博客立意:
JDK 8 虽然发布那么久了,一些特性也从未做总结,目前项目里边大量使用,特做此篇记录。与诸君共勉;
lamdba 表达式概念,运用
一、lambda 表达式
Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
二、lambda运用
1. 什么是匿名函数
顾名思意 不起名字直接能使用的函数 的叫匿名函数;那 java 中的函数长什么样子呢? 我们都知道 java 里边都是方法,一个接口对应多个方法,或者是一个方法,其中一个接口对应一个方法的就叫做 函数式接口。在 jdk1.8中函数式接口有如下几种特点:
1. 只有一个public 方法,其余可以有 default 方法,可以重写object 方法;在jdk 8 中 使用@FunctionalInterface 编译期检查是否是函数式接口,下面代码就是一个函数式接口;
@FunctionalInterface
public interface Predicate<T> {
/**
* Evaluates this predicate on the given argument.
*
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);
2. 如何实例化一个接口
代码如下(示例):
List list = new ArrayList();
// 实现方法二
List list = new List() {
@Override
public int size() {
return 0;
}
//省略其他方法 是需要实现的
};
第一种方法需要一个子类去 implements List 接口,而第二种方法需在使用List 接口的地方 实现List 接口的所有方法从而达到new List 的目的;
3. 如何调用匿名函数
- 说到匿名函数,我们看看非匿名函数
// 启动线程代码
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("strat");
}
}).start();
我们可以看到 new Runnable() 出来后并没有给该Runnable 接口一个名字 既:Runnable a = new Runnable() ; 所以在这里 这个Runnable 就称之为匿名函数,同时 Runnable 接口也符合jdk 8 定义的函数式接口 ,当然 lambda 表达式出现就是为了使 我们调用这种匿名接口更为方便,代码也更为简洁。
4. lambda 表达式 使用
使用 lambda 表达式 实现一个线程的启动,一行代码,省去了那些没有含义的代码( 匿名函数 ),;
// 启动线程代码
new Thread(() -> System.out.println("star")).start();
// 有参的方法使用lambda 表达式
userList.forEach((user) -> System.out.println(user.getName()));
总结
lambda 表达式 的运用使得我们的代码更为简洁,可读性更高 。