一、參考文章
怒學Java8系列一:Lambda表達式
Android開發中使用lambda表達式
android lambda語法簡述
二、Oracle官方介紹
lambda簡介
- 簡單說,就是Lambda提供了一個清晰和簡潔的方式來表示一個方法的接口使用的表達式。
三、AS配置使用環境
3.1 Android Studio 2.1.1之前,需要自己導入插件
-
3.1.1 在 Project 的 build.gradle 中添加如下代碼
dependencies { classpath 'me.tatarka:gradle-retrolambda:3.2.0' }
-
3.1.2 在 Module 的 build.gradle 中添加如下代碼
// 應用插件 apply plugin: 'me.tatarka.retrolambda' // 支持Java8 android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
配置完,編譯一下就大功告成
3.2 Android Studio 2.1.1之后(支持lambda插件)
-
先將SDK更新到最新,然后在 Module 的 build.gradle 文件中添加如下代碼
android { defaultConfig { jackOptions { // 打開jack編譯器 enabled true } } // 編譯支持Java8 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
四、Lambda表達式的使用
在AS中,如果配置了lambda的插件,可以用lambda的地方就會自動變灰色,然后用lambda替換就好了。
語法
語法一:()->{}
其中()和{}可以看情況去掉,()只有一個參數可去掉,{}里邏輯只有一行可去掉
-
無參數時,直接這么寫
// 創建Runnable對象 Runnable runnable = () -> { };
-
有一個參數時,直接 參數名 -> {}
View.OnClickListener listener = view -> { };
-
有多個參數時,只需要在()里寫上參數名字就可以
View.OnFocusChangeListener listener = (view, b) -> { };
語法二:::(兩個英文冒號)
::是對語法一的簡化。
-
如下代碼,可以實現語法一一樣的效果
static class LambdaTest{ public static void getData(String args1,boolean args2,int args3){ System.out.println("獲取數據了"); } } interface RequestTask { void requestData(String args1,boolean args2,int args3); } public static void main(String args[]){ RequestTask task1 = (args1, args2, args3) -> LambdaTest.getData(args1,args2,args3); RequestTask task2 = LambdaTest::getData; }
-
:: 語法有一下幾種使用情況
- 靜態方法引用:ClassName::staticMethodName
- 實例上的實例方法引用:instanceReference::methodName
- 構造方法引用:ClassName::new