“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
JAVA中Lambda表达式
Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。下面这个例子就是使用Lambda语法来代替匿名的内部类,代码不仅简洁,而且还可读。
//没有使用Lambda
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
System.out.println("Actiondetected");
}
})
//使用Lambda:
button.addActionListener(()->{
System.out.println("Actiondetected");
});
//不采用Lambda的老方法:
Runnable runnable1=new Runnable(){
@Override
public void run(){
System.out.println("RunningwithoutLambda");
}
};
//使用Lambda:
Runnable runnable2=()->{
System.out.println("RunningfromLambda");
};
Android Studio使用Lambda
Android Studio项目使用的jdk要为jdk 8或更高版本
修改build.gradle文件,enable jack和设置sourceCompatibility,targetCompatibility为jdk 8
defaultConfig {
jackOptions {
enabled=true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//例子:
Runnable runnable = () -> Toast.makeText(this, "abcd", Toast.LENGTH_SHORT).show();
runnable.run();
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(v -> Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show());
RxJava使用Lambda
Observable.just("this is first string", "this is second")
.compose(this.bindUntilEvent(ActivityEvent.DESTROY)).subscribe(s -> Log.e(TAG, s));
Observable.from(Arrays.asList(1, 2, 3, 4, 5))
.filter(integer -> integer % 2 == 0)
.map(integer -> integer * integer)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(integer -> Toast.makeText(this, String.valueOf(integer), Toast.LENGTH_SHORT).show());
参考:
http://blog.csdn.net/ioriogami/article/details/12782141/
https://baike.baidu.com/item/Lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F/4585794?fr=aladdin
网友评论