函数式编程—初识Lambda表达式
来源:互联网 发布:短信验证码平台源码 编辑:程序博客网 时间:2024/05/21 10:26
Java是一门完整的OOP编程语言,而Java8最大变化时引入了Lambda表达式,它传递了更加具体的行为。将Java带进了面向函数与面向对象编程思想相结合的时代。
函数即为对一个值或者一组值进行处理,从而映射成另一个值。面向对象编程是对数据的抽象,而面向函数编程则是对行为的抽象。
首先来看一段jAVA代码:
public class LambdaExample {public static void main(String[] args) {new Thread(() -> System.out.println("The first Lambda")).start(); //输出The first Lambda }}注意到Thread构造器中的这一行: () -> System.out.println("The first Lambda"),这其实就是一个最最简单的Lambda,它的作用便是实例化了一个Runnable类型的对象,等同于以下代码:
new Runnable() {@Overridepublic void run() {<span style="white-space:pre"></span>System.out.println("The first Lambda");}}这样看就十分地简单明了,看到这里大家应该对Lambda表达式的语义有一定的了解了。那么对于那些构建起来比较复杂的表达式应该怎么处理呢,比如对应的方法中存在多个参数值的类型?
我们来看下面的例子:
ActionListener ex2 = event -> System.out.println("button clicked!"); //使用Lambda表达式
Runnable ex2 = () -> {System.out.print("Hello");System.out.println(" World");}; //使用Lambda表达式
BinaryOperator<Long> ex2 = (Long x, Long y) -> x + y; //使用Lambda表达式
BinaryOperator<Long> ex2 = (x, y) -> x + y; //使用Lambda表达式比较上述的例子,Lambda表达式的语法不外乎这几点:
1.单一参数,参数列表的"()"可以省略
2.具体行为只有一行代码,可以省略域定义,即{}
3.参数类型相同,则可以省略类型,如例子中的Long类型
上面我们说到,函数式编程是对行为的抽象,其实在这里,Java仅仅是将构建一些特殊类的语法用Lambda进行精简,实质上仍然是构建了具体的对象实例,换言之,只是披上了一层"函数式"的外衣,不知道大家有没有这样的感觉?
那么问题来了,Lambda究竟是什么?上面的BinaryOperator到底是什么东西?
我们不得不引入一个概念,叫做"函数接口",熟悉Java语言的话,应该对接口两个字并不陌生。其实,函数接口的定义并不复杂:只有一个抽象方法的接口叫做函数接口。JDK中已经为我们定义了一些非常重要的函数接口:
接口名称参数返回值类型Predicate<T>TbooleanConsumer<T>TvoidFunction<T, R>TRSupplier<T>NONETUnaryOperator<T>TTBinaryOperator<T>(T, T)T同时,我们也可以自定义自己的函数接口,只要满足该接口中只有一个抽象方法即可,在创建Lambda表达式的时候,该接口会被自动识别。比如:interface MyFunctionalInterface{void test(String name, long startTime);}对于这样的自定义接口,使用Lambda来获得其实例:
MyFunctionalInterface m = (String name, long time) -> {System.out.println(name + "created!");};
0 0
- 函数式编程—初识Lambda表达式
- 函数式编程 Lambda表达式
- Java8-初识Lambda表达式与函数式接口
- 用Lambda表达式进行函数式编程
- Java8 Lambda表达式 函数式编程
- java函数式编程之lambda表达式
- 函数式编程--使用lambda表达式
- Java8 Lambda表达式 函数式编程
- Java8:函数式编程与Lambda表达式
- Java8 Lambda表达式 函数式编程
- Java函数式编程与Lambda表达式
- 函数式编程初步(lambda表达式)
- 【怎样写代码】函数式编程 -- Lambda表达式(四):Lambda表达式与Expression树
- 初识Lambda表达式
- 初识lambda表达式
- 初识lambda表达式
- 初识Lambda表达式
- Java8 Lambda 表达式初识
- Android 系统服务一览表
- 优化
- linux ——make
- Javascript类型转换的规则
- 链表求和
- 函数式编程—初识Lambda表达式
- 费马小定理
- 通过Python爬虫爬取知乎某个问题下的图片
- java面试宝典学习笔记(二)
- 数据库查询代价估算优化的深度介绍
- 两个线程运行++a
- xml解析02
- JSP
- spring4.x读书笔记