函数式编程

本文探讨了函数式编程的特点,如纯函数和高阶函数,并深入讲解了Java中的Lambda表达式、函数式接口,以及如何创建和操作流。重点讨论了流的概念,包括建立流的各种方式以及常用的操作符,如forEach、findFirst和collect。此外,还介绍了Optional流在处理可能为空的数据时的作用。最后,文章阐述了函数式编程在实际工业应用中的优势。
摘要由CSDN通过智能技术生成

1、直指结果

函数式编程带来的编码上的优势,更加注重业务逻辑的编写。

2、函数式编程的特点:

1、纯函数

左边部分代码是纯函数,函数的返回值完全依赖于输入参数,并没有成员函数影响到返回结果,从输入参数中能完全看出输出的结果。

右边部分代码不是纯函数,因为输入参数决定不了输出的结果,输出结果还与成员变量value有关。

2、高阶函数

上述的函数必须是一个函数式接口,即每个接口内只含有一个抽象方法,下面会有介绍。

3、lamda表达式

4、Java函数式接口

5、内建的函数式接口

 1、Function 

例子中表示,函数的参数是一个long类型,并且返回值也是long类型的函数。其中第一行代码表示声明了这样一个函数,第二行运用apply来对第一行代码进行执行。

6、函数的组合

 对于第二个组合,compose先计算括号内的函数再计算括号外面的函数。即先计算doubleOp函数,再计算squareOp函数。

andthen正好相反,即先计算squareOp函数,再计算doubleOp函数。

7、流的概念

建立流的方式

数组:Arrays.stream(array)

集合:各种集合.stream()    例如list:UserList.stream()

Stream.of()   即将数组拆分开,一个个进入流中。内部可以存放任意对象,此时返回的对象将是Object类型

Stream.builder()与Stream.of() 类似,但在最后要加一个build()才可以成为流。

8、常见操作符

第一行:中间操作符,即该类操作符通常后面会继续跟其它操作符

余下的是终端操作符,执行到该操作符后即终止,后面不可再接操作符

forEach:等同于for循环

forEachOrdered在非并行流时与forEach一样,但在parallelStream()中会保证顺序

findFirst:返回第一个满足条件的结果

findAny在非并行流时与findFirst一样,但在parallelStream()中不能够保证顺序

anyMatch:有任何一个匹配上的即可,返回的是布尔值

map:类型转换,一对一逻辑映射

9、Optional流:对数据是否为空进行的相关判断,确保数据为空时流也不会中断

第一行方法:判断是否为空

第二行方法:当数据为空时,可以调用的处理方法

orElse("hello"):当流出来的数据为空时,可以赋予一个新固定常量

orElseGet(()->"hello"):相当于一个工厂,可以返回一个函数

orElseThrow:抛出异常

or:返回一个Optional流

第三行方法:有值的时候继续处理的方法,有值时参数为该值

ifPresent:有值的时候执行一个代码块内的逻辑

ifPresentOrElse:有值、无值两种情况均需要代码块来进一步进行逻辑处理时

collecting:与collect类似,但多一个参数,第一个参数进行逻辑处理,第二个参数是进行集合聚合;可以作为中间操作符

collectingAndThen:第一个参数是进行集合聚合,然后对聚合后的集合进行操作

flatMap:用来处理流,对流进行扁平化处理,即内部如果是嵌套性元素,将它们拆开不再嵌套

 

1、通常情况下,可以用来减少作用,如将一个数组减少成为一个数字等

2、类似于collect,可以用于做转换

代码一:         0:初始化数值           acc:累加器        curr:当前数值     代码功能:数值累加

代码二:  创建一个Mutablelnt数组,不断的把user添加进去,最后做一个add操作

10、工业上的应用

两种查询语句的不同:使用流是对数据单个读取操作,操作完后释放,内存性能上都更优。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值