Java8函数式编程入门 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

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表达式进行构造,在后面进一步举例说明。