轉載請註明出處:http://blog.csdn.net/linglongxin24/article/details/53888504
本文出自【DylanAndroid的部落格】
Android中如何使用Lambda表示式高效開發
當我們在Android開發中,使用Android Studio時,去寫一個執行緒或者button的點選事件時,寫完之後使用程式碼摺疊功能,可以看到如下預覽:
這個其實就是Lambda表示式的寫法。我們發現,對於我們開發來說,不會去關心這個類以及方法,只會關心這個方法內的程式碼,所以其他的多餘程式碼就顯得多餘了。那麼,到底具體如何使用呢?
一.在build.gradle中加入如下配置
jackOptions{
enabled true
}
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}複製程式碼
#二.使用lambda表示式的三種寫法
1.第一種方式,無引數+語句(程式碼塊):適用於匿名內部類中方法無引數的情況
/**
* 第一種方式,無引數+語句(程式碼塊):適用於匿名內部類中方法無引數的情況
* () -> 語句
* 或
* () -> {程式碼塊}
**/
private void threadTest() {
/**普通寫法**/
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
/**使用lambda表示式寫法**/
new Thread(() -> Log.d(TAG, "this is a lambda Thread")).start();
}複製程式碼
2.第二種方式,有引數+語句:適用於匿名內部類中方法只有一個引數的情況
/**
* 第二種方式,有引數+語句:適用於匿名內部類中方法只有一個引數的情況
* 方法引數 -> 語句
* 或
* 方法引數 -> {程式碼塊}
*/
private void setOnClick() {
/**普通寫法**/
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "this is a general onClick");
}
});
/**使用lambda表示式寫法**/
findViewById(R.id.button).setOnClickListener(v -> Log.d(TAG, "this is a lambda onClick"));
}複製程式碼
3.第三種方式,有引數+程式碼塊:適用於匿名內部類中方法不止一個引數的情況
/**
* 第三種方式,有引數+程式碼塊:適用於匿名內部類中方法不止一個引數的情況
* (引數1, 引數2) -> 語句
* 或
* (引數1, 引數2) -> {程式碼塊}
*/
private void setOnChecked() {
CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
/**普通寫法**/
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d(TAG, "this is a general onCheckedChanged");
}
});
/**使用lambda表示式寫法**/
checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
Log.d(TAG, "this is a lambda onCheckedChanged");
Log.d(TAG, "this is a lambda onCheckedChanged_isChecked=" + isChecked);
});
}複製程式碼