目录
●为什么要用Lambda表达式?
在本文写作时,Java8其实已经推出4年有余,Lambda表达式已经不算是一个“新”东西了,很多语言,诸如C#、Python都支持了这个特性。笔者在工作中发现很多非互联网公司的传统项目,还是在用Java7进行开发,究其根本是对新技术学习成本和使用成本的控制,这个暂且按下不表。未来,工作中新的一个项目会基于Java8进行开发,笔者通过网络比较一了下两个JDK版本的差异,最大的不同,也是大家津津乐道的Java8对Lambda表达式的支持。
第一次接触这个特性的时候,走了一些弯路,直接看的《JAVA8函数式编程》这本书,感觉概念上有点抽象,后来在CSDN、知乎等平台看了一些碎片化的文章,对Lambda有了具象的了解。本文将从笔者,也是大部分初学Lambda表达式的同学的角度出发,提出问题“是什么”。
其实,在目前阶段,不深究其原理的话,要解答“是什么”,不如来看看“为什么要用Lambda表达式”:
public class App
{
public static void main( String[] args )
{
//java7 传统写法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(String.format("This is a thread(%s) via java7...",Thread.currentThread().getId()));
}
}).start();
//java8 Lambda写法
new Thread(() -> System.out.println(String.format("This is a thread(%s) via java8...",Thread.currentThread().getId()))).start();
}
}
代码很简单,两种写法作用都是主线程中开启新的一个子线程,打印一句话。前者用了经典教科书上创建线程的写法之一;后者则用了Lambda表达式
() -> System.out.println(String.format("This is a thread(%s) via java8...",Thread.currentThread().getId()))
实现同样功能。
发现了吗?利用Java8中Lambda表达式将原本匿名内部类的一段代码简化为了1行。这也是笔者认为的Lambda最重要也是能最先具象展现给各位程序员的用途。现在还看不懂它是怎么做到的,没关系,请记住这句话:将原本匿名内部类的一段代码简化。接下来第二部分我们来重点看看Lambda表达式的构成及各部分的含义。
●Lambda表达式拆解
以第一部分为例:
new Thread(() -> System.out.println(String.format("This is a thread(%s) via java8...&