多執行緒02-Lambda表示式(為了方便實現runnable介面)
阿新 • • 發佈:2021-01-15
技術標籤:java進階及高階
1. Lamda表示式
Lambda 表示式(lambda expression)是一個匿名函式,Lambda表示式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函式,即沒有函式名的函式。Lambda表示式可以表示閉包(注意和數學傳統意義上的不同)。
Java 8的一個大亮點是引入Lambda表示式,使用它設計的程式碼會更加簡潔。當開發者在編寫Lambda表示式時,也會隨之被編譯成一個函式式介面。下面這個例子就是使用Lambda語法來代替匿名的內部類,程式碼不僅簡潔,而且還可讀。
函式式介面的定義:
- 任何介面,如果質保函唯一一個抽象方法,那麼它就是一個函式式介面
public interface Runnable{
public abstract void run();
} - 對於函式式介面,我們可以通過lambda表示式來建立改介面的物件
package com.ren.lambdaShow;
/**
* @author Ren
*/
/**
* 推導lambda表示式
*/
public class TestLambda01 {
//3. 靜態內部類
static class Like2 implements Ilike{
@Override
public void lambda() {
System.out.println("I like lambda2");
}
}
public static void main(String[] args) {
Ilike like = new Like1();
like.lambda();
like = new Like2();
like.lambda();
//4. 區域性內部類
class Like3 implements Ilike {
@Override
public void lambda() {
System.out.println("I like lambda3");
}
}
like = new Like3();
like.lambda();
//5. 匿名內部類
like = new Ilike() {
@Override
public void lambda() {
System.out.println("I like lambda4");
}
};
like.lambda();
//6. 用lambda表示式簡化
like = ()->{
System.out.println("I like lambda5");
};
like.lambda();
}
}
//1. 定義一個函式式介面
interface Ilike {
void lambda();
}
//2. 實現類
class Like1 implements Ilike {
@Override
public void lambda() {
System.out.println("I like lambda1");
}
}
package com.ren.lambdaShow;
/**
* @author Ren
*/
public class TestLambda02 {
public static void main(String[] args) {
Ilove love = null;
love = (int a)->{
System.out.println("I love you -> " + a);
};
love.love(520);
//簡化1: lambda表示式簡化 去掉引數型別
love = (a)->{
System.out.println("I love you -> " + a);
};
love.love(521);
//簡化2: 去掉括號
love = a->{
System.out.println("I love you -> " + a);
};
love.love(5201);
//簡化3: 去掉花括號
love = a-> System.out.println("I love you -> " + a);
love.love(555521);
/**
* 總結:
* lambda表示式只能在只有一行才能簡化成一行,如果有多行,那麼就用程式碼塊包裹
* 前提是: 介面是函式式介面(一個藉口中只能有一個方法)
* 多個引數,也可以去掉引數型別,要去的就都去了,必須加上括號(a,b,c)
*/
}
}
interface Ilove{
void love(int a);
}