“Lambda 表達式”(lambda expression)是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。Lambda表達式可以表示閉包(注意和數學傳統意義上的不同)。
Java 8的一個大亮點是引入Lambda表達式,使用它設計的代碼會更加簡潔。當開發者在編寫Lambda表達式時,也會隨之被編譯成一個函數式接口。下面這個例子就是使用Lambda語法來代替匿名的內部類,代碼不僅簡潔,而且還可讀。
這麼簡單好用的東西,可遺憾的是Android Studio本身並不支持Lambda,所以我們第一步是配置環境
添加插件
1. 在project的build.gradle中添加紅框內容
2. 在Module(app)的build.gradle中添加紅框內容
使用對比:
沒有使用Lambda的老方法:
Button button = new Button(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Logo.this, "圖個泡泡", Toast.LENGTH_SHORT).show();
}
});
使用Lambda:
button.setOnClickListener((v)->{
Toast.makeText(Logo.this, "圖個泡泡", Toast.LENGTH_SHORT).show();
});
讓我們來看一個更明顯的例子。
不採用Lambda的老方法:
Runnable runnable = new Runnable() {
@Override
public void run() {
Toast.makeText(Logo.this, "圖個泡泡", Toast.LENGTH_SHORT).show();
}
};
使用Lambda:
runnable = ()->{
Toast.makeText(Logo.this, "圖個泡泡", Toast.LENGTH_SHORT).show();
};
正如你所看到的,使用Lambda表達式不僅讓代碼變的簡單、而且可讀、最重要的是代碼量也隨之減少很多。然而,在某種程度上,這些功能在Scala等這些JVM語言裏已經被廣泛使用。