Java函数式编程详解(定义特点及应用实例)

Java函数式编程详解(定义特点及应用实例)-mikechen

函数式编程定义

函数式编程是一种编程范式,主要是利用函数把运算过程包装起来,我们想实现一个复杂的功能时,可以通过组合各种函数来计算结果。

函数式编程的核心概念很简单,就是将函数存到变量里,可以被当做参数传递,可以被赋值,被引用,用在返回值里。

函数式编程主要的思想:是把运算的过程尽量通过一组嵌套的函数来实现。

 

函数式编程的特点

  • 函数可以作为变量、参数、返回值和数据类型。
  • 基于表达式来替代方法的调用;
  • 由于函数的特性,易于调试和使用;
  • 易于并发使用;
  • 脚本语言的特性,易于升级部署;

 

Java函数式编程

Java Lambda表达式就是函数式编程的体现,Java 8开始支持Lambda表达式,而函数式编程的大厦最初就是基于Lambda计算构建起来的。

所以,在Java中函数式编程是通过Java Lambda表达式实现的,Java8新引入函数式编程方式后,大大的提高了编码效率。

 

Lambda表达式

Lambda 表达式是 JDK8 的一个新特性,也被称为闭包,Lambda表达式允许把函数作为一个方法的参数,即行为参数化,函数作为参数传递进方法中。

lambda 表达式的语法格式如下:

Java函数式编程详解(定义特点及应用实例)-mikechen

  • ():左侧部分指定了Lambda表达式需要的所有参数。
  • ->:Lambda表达式的操作符或者箭头操作符。
  • {}:右侧部分指定了Lambda体,即方法需要实现的内容。
() -> System.out.println("mikechen");

Lambda 表达式创建线程示例:

//JDK 8之前
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("使用匿名内部类,开线程");
}
}).start();

//JDK 8 使用lambda表达式
new Thread(() -> System.out.println("使用lambda表达式,开线程")).start();

 

Java函数式接口

Lambda表达式需要Java函数式接口的支持,所以,我们有必要来说说Java函数式接口

首先需要清楚一个概念:函数式接口,它指的是:有且只有一个未实现的方法的接口,一般通过FunctionalInterface这个注解来表明某个接口是一个函数式接口。

比如:

@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

这个就一个函数式接口。

 

@FunctionalInterface注解

Java 8中专门为函数式接口引入了一个新的注解: @FunctionalInterface 。

该注 解可用于一个接口的定义上:

@FunctionalInterface
public interface MyFunctionalInterface { void myMethod();
}

一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错。

需要注 意的是:即使不使用该注解,只要满足函数式接口的定义,这仍然是一个函数式接口,使用起来都一样。

 

Java函数式编程应用

函数式典型的应用场景:是当我们运算的过程可以抽象成好几个步骤时,把其中相同部分,抽象成公共方法。

比如:公共common方法,并且把函数式接口作为其入参,在具体业务实现中,使用lambda表达式实现具体业务实现。

 

Java函数式编程小结

函数式编程的大厦最初就是基于Lambda计算构建起来,Java 8开始支持Java Lambda表达式,我们可以使用Java Lambda表达式来快速编写Java函数映射。

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法