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 等等,暂时体验一下。翠华,先不上菜啦,后续更新。