java8函数式编程和流(Stream)总结

1、相关概念

【1】函数(Function)
在java中,函数就是指方法,在java8之前,函数是无法作为参数传给一个方法的,也就是说函数是无法独立存在的,必须依附于一个类实例(对象)。
从java8开始,函数成为java语言的“一等公民”,和类实例(对象)是同一个级别。
行为参数化,行为(函数)可以作为参数传递。
【2】lambda表达式
可以表示成一个可以传递的匿名函数,它由参数列表、函数体、返回类型、异常列表 组成。
在这里插入图片描述
【3】函数式接口(Function Interface)
一个只包含一个抽象方法的接口(但可以有多个默认方法)。一个Lambda表达式可以赋值给一个函数式接口。
jdk中加上@FunctionalInterface的接口都是函数式接口。
编译器编译时会把Lambda表达式的签名和函数式接口中抽出方法的接口的签名进行匹配,如果无法匹配,编译不通过。
Lambda表达式和方法引用是函数式接口的一个实例。
【4】函数式描述符
函数式接口中的抽象方法的签名
【5】方法引用(Method Reference)
方法引用可以让你重用现有的方法,它是Lambda表达式的一种快捷写法,它的语法是::
在这里插入图片描述
【6】默认方法(Default Method)
在java8之前,为了给JDK中已有的接口增加新的方法,必须要求所有实现类都实现新增的方法,但这老代码的兼容性问题提出了很大的挑战(接口是无法控制实现类的),否则老代码无法编译,所以作为JDK8的设计者就加入了默认方法的概念。接口中的方法增加关键字default,默认方法提供默认实现,这样,就解决了老代码的兼容性问题,如果需要提供新方法的新实现,可以覆盖默认方法实现即可。
【7】流(Stream)
java8中引入了StreamAPI,所谓流,是一种以声明式方法处理数据集的方式,类似于SQL查询语句,或者你可以把它看做更高级的迭代器。

2、各种编程思想比较

2.1、函数式编程vs面向对象编程

函数式编程是一种无状态的没有副作用的编程方式,
极端的面向对象编程是一种把一切都看做对象的一种编程方式。

2.2 声明式编程vs命令式编程

声明式编程通常专注于“做什么”,而命令式编程专注于“如何做”。
函数式编程具体实践了声明式编程(“你只需要使用不相互影响的表达式,描述想要做什么,由系统来选择如何实现”)和无副作用计算
StreamAPI是一种典型的声明式编程。

3、流式编程

3.1 流(Steam)vs集合(Collection)

在这里插入图片描述
流和集合的区别:
1、集合是一种内存数据结果,必须先计算出来才能放到集合中,而流是按需计算
2、流只能遍历一次,如果需要再次遍历,必须重新获取数据源,流只能被消费一次,而集合因为是内存中的一个确定数据结构,所以可以遍历多次。
3、流的迭代在内部完成,而集合必须在外部通过代码显式迭代。
4、流用于描述对于数据的计算,集合主要是为了存储和访问数据

3.2 流操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 SteamAPI

4、并发编程

4.1 流vs并发

4.2 并发vs并行

4.3 Java并发编程的演进之路

5、函数式编程和流给Java带来了什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值