Java8函数式编程简介
函数式编程语言的核心是它以处理数据的方式处理代码。这意味着函数应该是第一等级(First-class)的值,并且能够被赋值给变量,传递给函数等等。事实上,很多函数式语言比这走得更远,将计算和算法看得比它们操作的数据更重要。
Java是一种固执己见的语言,它具有很好的可读性,初级程序员很容易上手,具有长期稳定性和可支持性。但这些设计决定也付出了一定的代价:冗长的代码,类型系统与其它语言相比显得缺乏弹性。
看个例子,一般Java多线程中用Runnable实现逻辑交由线程执行,但是这个代码看起来有点冗长,这是面向对象编程。
Runnable r = new Runnable() {
public void run() {
System.out.println("Hello World!");
}
};
Java8 Lambda表达式就是改变这种状况。让代码更加精简、不在冗长。
@FunctionalInterface注解
Java8提供了函数式编程接口的概念。函数式接口:是只定义了单一抽象方法的接口,用作Lambda表达式的类型。举个简单的例子,Runnable接口就是一个Functional Interface,下面是它的源代码:
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
理解FunctionalInterface(函数式接口)是学习Java8 Lambda表达式的关键所在。
注解@FunctionalInterface用于Service表明Service接口是一个函数式接口,这里需要强调的是:函数式接口只能有一个抽象方法,而不是只能有一个方法。
函数式接口的实例可以由方法引用或者Lambda表达式进行构造,在后面进一步举例说明。