在 Java 世界中,匿名内部类 可以实现在应用程序中可能只执行一次的操作。例如,在 Android点击事件中,可以用匿名内部类完成该操作:
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
}
});
代码虽然看起来不是很优雅,但是代码看起来好理解,可以直接在代码调用的地方知道点击该按钮会触发什么操作。
Lambda 表达式语法
Lambda 表达式通过把匿名内部类五行代码简化为一个语句。这样使代码看起来更加简洁。
一个 Lambda 表达式 由三个组成部分:
参数列表 箭头符号 函数体
(int x, int y) -> x + y
函数体可以是单个表达式,也可以是代码块。如果是单个表达式的话,函数体直接求值并返回了。如果是代码块的话,就和普通的函数一样执行
看下面几个表达式:
(int x, int y) -> x + y
两个整数型参数 x 和 y,表达式返回 x + y 的值
() -> 42
不带参数,直接返回42
(String s) -> { System.out.println(s)
string 参数,使用代码块的方式把该参数打印出来,没有返回值
例子
Runnable看下面的例子:
public void runnableTest() {
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello world one!");
}
};
// Lambda Runnable
Runnable r2 = () -> System.out.println("Hello world two!");
// 执行两个 run 函数
r1.run();
r2.run();
}
Lambda表达式将匿名内部类的5行代码转换为1行代码,更加简洁!
Comparator
Person类工具name进行排序
public class ComparatorTest {
public static void main(String[] args) {
List<Person> personList = Person.createShortList();
// 使用内部类实现排序
Collections.sort(personList, new Comparator<Person>() {
public int compare(Person p1, Person p2) {
return p1.getSurName().compareTo(p2.getSurName());
}
});
// 使用 Lambda 表达式实现
// 升序排列
Collections.sort(personList, (Person p1, Person p2) -> p1.getSurName().compareTo(p2.getSurName()));
// 降序排列
Collections.sort(personList, (p1, p2) -> p2.getSurName().compareTo(p1.getSurName()));
}
}
第二个 Lambda 表达式省略了该类型定义。Lambda 表达式支持类型推倒,如果通过上下文可以推倒出所需要的类型,就可以省略类型定义.
Lisenter
view.setOnClickListener( v -> Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show() )
以上就是对lambda表达式的简单学习,以后在项目中需要用到在做进一步 学习了解!