lambda表达式是在java 8的时候出现的
lambda表达式是一段可以传递的代码,因此它可以被执行一次或多次
lambda的表达式语法格式也十分简单:参数、箭头(->)和一个表达式,即:
(String first, String second) -> {
if (first.length() < second.length()) return -1;
else if (first.length() > second.length()) return 1;
else return 0;
}
这就是一个简单的lambda表达式
在没有参数的时候,我们就可以用空的()表示,即:
() -> {
for (int 1 = 0, i < 10, i++)
//dosomething
}
当然如果参数的类型可以通过前后文语句推倒,则可以省略
EventHander<ActionEvent> listener = event -> {
System.out.println("click!");
}
由前面可知,event是个ActionEvent类型可省略
lambda表达式中方法的引用
- 对象:实例方法
- 类:实例方法
- 类:静态方法
如:触发按钮事件时打印按钮对象
button.setOnAction(event -> System.out.println(event))
button.setOnAction(System.out::println)
还有比如:
this::equals = str -> this.equals(str)
super::实例方法 = () -> super.greet()
lambda表达式的变量作用域
如果想在lambda闭合的方法或类中使用其他变量,即
public static void printMsg(String msgs, int count) {
Runnable r = () -> {
for (int i = 0; i < count; i++) {
System.out.println(msgs);
Thread.yield();
}
};
new Thread(r).start();
}
调用时:
printMsg("Hello World!", 100);
这样lambda表达式中就可以访问变量msgs和count