轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/linglongxin24/article/details/53888504
本文出自<【DylanAndroid的博客
Android中如何使用Lambda表達(dá)式高效開發(fā)
當(dāng)我們?cè)贏ndroid開發(fā)中,使用Android Studio時(shí),去寫一個(gè)線程或者button的點(diǎn)擊事件時(shí),寫完之后使用代碼折疊功能,可以看到如下預(yù)覽:
折疊代碼
這個(gè)其實(shí)就是Lambda表達(dá)式的寫法。我們發(fā)現(xiàn),對(duì)于我們開發(fā)來說,不會(huì)去關(guān)心這個(gè)類以及方法,只會(huì)關(guān)心這個(gè)方法內(nèi)的代碼,所以其他的多余代碼就顯得多余了。那么,到底具體如何使用呢?
一.在build.gradle中加入如下配置
jackOptions{
enabled true
}
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

折疊代碼
二.使用lambda表達(dá)式的三種寫法
1.第一種方式,無(wú)參數(shù)+語(yǔ)句(代碼塊):適用于匿名內(nèi)部類中方法無(wú)參數(shù)的情況
/**
* 第一種方式,無(wú)參數(shù)+語(yǔ)句(代碼塊):適用于匿名內(nèi)部類中方法無(wú)參數(shù)的情況
* () -> 語(yǔ)句
* 或
* () -> {代碼塊}
**/
private void threadTest() {
/**普通寫法**/
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
/**使用lambda表達(dá)式寫法**/
new Thread(() -> Log.d(TAG, "this is a lambda Thread")).start();
}
2.第二種方式,有參數(shù)+語(yǔ)句:適用于匿名內(nèi)部類中方法只有一個(gè)參數(shù)的情況
/**
* 第二種方式,有參數(shù)+語(yǔ)句:適用于匿名內(nèi)部類中方法只有一個(gè)參數(shù)的情況
* 方法參數(shù) -> 語(yǔ)句
* 或
* 方法參數(shù) -> {代碼塊}
*/
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表達(dá)式寫法**/
findViewById(R.id.button).setOnClickListener(v -> Log.d(TAG, "this is a lambda onClick"));
}
2.第二種方式,有參數(shù)+語(yǔ)句:適用于匿名內(nèi)部類中方法只有一個(gè)參數(shù)的情況
/**
* 第三種方式,有參數(shù)+代碼塊:適用于匿名內(nèi)部類中方法不止一個(gè)參數(shù)的情況
* (參數(shù)1, 參數(shù)2) -> 語(yǔ)句
* 或
* (參數(shù)1, 參數(shù)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表達(dá)式寫法**/
checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
Log.d(TAG, "this is a lambda onCheckedChanged");
Log.d(TAG, "this is a lambda onCheckedChanged_isChecked=" + isChecked);
});
}