函数式编程定义
函数式编程是一种编程范式,主要是利用函数把运算过程包装起来,我们想实现一个复杂的功能时,可以通过组合各种函数来计算结果。
函数式编程的核心概念很简单,就是将函数存到变量里,可以被当做参数传递,可以被赋值,被引用,用在返回值里。
函数式编程主要的思想:是把运算的过程尽量通过一组嵌套的函数来实现。
函数式编程的特点
- 函数可以作为变量、参数、返回值和数据类型。
- 基于表达式来替代方法的调用;
- 由于函数的特性,易于调试和使用;
- 易于并发使用;
- 脚本语言的特性,易于升级部署;
Java函数式编程
Java Lambda表达式就是函数式编程的体现,Java 8开始支持Lambda表达式,而函数式编程的大厦最初就是基于Lambda计算构建起来的。
所以,在Java中函数式编程是通过Java Lambda表达式实现的,Java8新引入函数式编程方式后,大大的提高了编码效率。
Lambda表达式
Lambda 表达式是 JDK8 的一个新特性,也被称为闭包,Lambda表达式允许把函数作为一个方法的参数,即行为参数化,函数作为参数传递进方法中。
lambda 表达式的语法格式如下:
- ():左侧部分指定了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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》