轉載請註明出處:http://blog.csdn.net/linglongxin24/article/details/53888504
本文出自【DylanAndroid的博客】 java
當咱們在Android開發中,使用Android Studio時,去寫一個線程或者button的點擊事件時,寫完以後使用代碼摺疊功能,能夠看到以下預覽:
android
這個其實就是Lambda表達式的寫法。咱們發現,對於咱們開發來講,不會去關心這個類以及方法,只會關心這個方法內的代碼,因此其餘的多餘代碼就顯得多餘了。那麼,到底具體如何使用呢?
jackOptions{
enabled true
}
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}複製代碼
#二.使用lambda表達式的三種寫法git
/** * 第一種方式,無參數+語句(代碼塊):適用於匿名內部類中方法無參數的狀況 * () -> 語句 * 或 * () -> {代碼塊} **/
private void threadTest() {
/**普通寫法**/
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
/**使用lambda表達式寫法**/
new Thread(() -> Log.d(TAG, "this is a lambda Thread")).start();
}複製代碼
/** * 第二種方式,有參數+語句:適用於匿名內部類中方法只有一個參數的狀況 * 方法參數 -> 語句 * 或 * 方法參數 -> {代碼塊} */
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"));
}複製代碼
/** * 第三種方式,有參數+代碼塊:適用於匿名內部類中方法不止一個參數的狀況 * (參數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);
});
}複製代碼