本文从两大方面介绍Lambda表达式:
第一,lambda表达式的语法——从传统java语法到崭新的lambda语法的过渡。
第二,在运行时lambda表达式如何展现的,其中涉及了什么字节码指令。
入门
如果你对包含lambda表达式的其他语言如Groovy或Ruby了解的话,第一眼你可能会惊讶地发现在java中并不简单。
在java中,lambda表达式是SAM(Single Abstract Method,简单抽象方法)(是的,接口现在可以包含非抽象方法(默认/防御方法),我们将在下一篇中介绍)。
例如,常用的接口Runnable就完全适合作为SAM类型:
Runnable r = () -> System.out.println("hello lambda!");
再如,Comparator接口:
Comparator cmp = (x, y) -> (x < y) ? -1 : ((x > y) ? 1 : 0);
上式也可以这样写:
Comparator cmp = (x, y) -> {
return (x < y) ? -1 : ((x > y) ? 1 : 0);
};