Lambda表达式是Java SE 8中包含的一个新的重要特性。它们提供了一种使用“表达式”表示“方法接口”的清晰而简洁的方法。Lambda表达式还改进了集合库(Collection),使其更容易迭代、过滤和从集合中提取数据。此外,新的并发特性提高了多核环境中的性能。
直接上个例子:下面的例子是大家熟悉的新建一个线程。很明显使用lambda的方式让代码更加简洁。
//没有使用lambda方式
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread A");
}
}).start();
//使用lambda方式
new Thread(() -> System.out.println("Thread B"));
上面的例子里面lambda表达式的方式替换了传统的匿名内部类作为参数。
Lambda表达式的形式:(参数) -> {方法块}
比如,() -> System.out.println("Thread B") 就代表Runnable类里面的run方法。()代表run方法不需要传参数,System.out.println("Thread B")代表方法块。
这么写是不是很神奇,Java在JDK8里面加入了什么怎么能支持这种操作。
鼠标点击 -> 发现居然进入了Runnable类。
细看
发现Runnable类里面比之前多了一个类注解。@FunctionalInterface
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
@FunctionalInterface是JDK新增的函数式接口。也就是加入了这种函数式接口,才让jdk支持了lambda表达式。
函数式接口,将在下一篇中讲解。
谢谢。