lambda表达式是java8新增的功能,他们明显的增强了java,原因2点:
1),它们增加了新的语法元素,使java语言的表达能力得以提升,并流线化了一些常用结构的实现方法
2),lambda表达式的加入也导致了API库中增加了新的功能,比如说新的流API。
OK,理论点就不多说了,我们具体的引入2个例子来说明lambda出现的原因。我之所以要花时间整理这个东西出现的原因是因为我觉得很有必要,凡事在进步,当有一个新的东西出现的时候我们应该也必须知道这个东西出现的本质,这样子才能更好的利用这个东西。
我们先举一个例子:
1),当我们要在另一个独立线程中执行一个逻辑时,通常会将代码放在一个实现Runnable接口的类的run方法中,然后将这个实例提交到一个线程池中或者说直接启动这个线程,具体代码如下:
public class Test implements Runnable { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("这里表示一个操作。。。"); } } public static void main(String[] args) { new Thread(new Test()).start(); } }
2),上面的代码显得有点繁琐,我在实际编码的时候就觉得有点恶心,现在我们使用匿名内部类来简写下上面的代码:
public class Test { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("这里表示一个操作。。。"); } } }).start(); } }
3),现在使用起来也有点恶心,因为我只是想传递一个方法,在这里就是一个线程执行体到这个线程里面,但是java规定我不得不写一个匿名内部类,然后实现这个Runnable里面定义的run方法,因为java不允许传一段代码进方法的,现在我们使用lambda表达式来写上面的代码:
public class Test { public static void main(String[] args) { new Thread(() -> { for (int i = 0; i < 100; i++) { System.out.println("这里表示一个操作。。。"); } }).start(); } }
4),如果说我们没有那个循环的话,我们上面的代码将更加的简单:
public static void main(String[] args) { new Thread(() -> System.out.println("这里表示一个操作。。。")).start(); }
OK,现在我们已经能明确的体会到lambda表达式在编码上带来的简洁性了。不说别的,单纯的就这点来说我们就应该开始使用lambda表达式了,其他还有好多的好处,下面我做一个整理:
1,一个lambda表达式是一个带参数的代码块
2,当你想要代码块在以后的某个时间点执行,就可以使用lambda表达式
3,lambda表达式可以被转换为函数式接口
4,lambda表达式可以在闭包作用域中有效的访问final变量
5,方法和构造器引用可以引用构造器和方法,但无效调用他们,我们使用这种新的语法编码更加的简单。