Lambda 表达式是在Java 8中开始支持的一种函数式推导语言,能够大量减少匿名内部类那种冗余的代码。在Android中,可以大量使用在设置监听、设置异步回调等场景。

当然在Android工程中直接使用JDK 8编译向下兼容还是有问题,你可以通过 Retrolambda 让使用Lambda表达式的Java 8代码运行在Java 7或更低版本上,让Lambda不再专属于Java 8,提高工程师的逼格。

1、将 Retrolambda 运用于Android中:

在Project的build.gradle中添加
buildscript {
  repositories {
     mavenCentral()
  }
  dependencies {
     classpath 'me.tatarka:gradle-retrolambda:3.2.5'
  }
}

在app的build.gradle中添加
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

2、体验之前,先看一下Lambda的语法:

parameter -> expression
(parameters) -> expression
(parameters) -> statement
或者
(parameters) -> { statements; }

总结出一般的语法
(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
	statment1;
	statment2;
	...
	return statmentN;
}

3、看完语法后,下面看看它逼格到底有多高:

匿名内部类的简化

button.setOnClickListener((v) -> doSomething(v));
button.setOnClickListener(this::doSomething); // 方法引用是使用两个冒号::这个操作符号

private void doSomething(View v) {
	...
}

或者

button.setOnClickListener((v) -> doSomething());
button.setOnClickListener((v) -> {
	doSomething();
	doSomething();
	doSomething();
});

private void doSomething() {
	...
}

当然,使用Lambda可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等,暂时体验一下。翠华,先不上菜啦,后续更新。