java8+函数式编程总结_Java8函数式编程的宏观总结

1.java8优势

通过将行为进行抽象,java8提供了批量处理数据的并行类库,使得代码可以在多核CPU上高效运行。

2.函数式编程的核心

使用不可变值和函数,函数对一个值进行处理,映射成另一个值。

3.Lambda表达式

一种紧凑的、传递行为的方式。

4. 静态类型语言

java8依旧是静态类型语言,javac依旧会在编译时,对参数类型进行检查。

5.函数接口

只有一个抽象方法的接口,用作lamdba表达式的类型。

6.对核心类库的改进-Stream

实现机制

整个过程:一系列惰性求值方法+最后一个及早求值方法

常用流操作

collect

及早求值的方法,用于生成list,set,map。

map

将一个流中的值转化为一个新的流,对应的业务逻辑是:有一个函数需要将一种类型的值转为另一种类型。

filter

遍历数据并检查其中的元素,过滤掉不符合条件的元素。接受一个Predicate接口

flatmap

可用Stream替换值,然后将多个Stream连接成一个Stream

例如:List together=Stream.of(list1,list2,…,listn).flatMap(num->num.stream()).collect(Collectors.toList());

max和min

参数:参数为排序指标

格式:xx.stream().max(Comparator.comparing(…)).get();

reduce

从一组值生成一个值

例如count(),sum()等

使用方法有两种形式

有初始值

无初始值

返回对象:Optional对象

如果code想要并行化,则reduce操作有2个限制

初值必须为组合函数的恒等值

组合操作必须符合结合律

Stream迭代的优势

利用Stream进行迭代,使得迭代过程从外部迭代 转为 内部迭代。

外部迭代缺点:

本质上,属于串行化操作

7. 对核心类库的改进-集合类API

形式上:引入default方法和接口的static方法

基本类型的改变:

只包括:Integer,Long,Double共计3种,因为这3种在数值计算中使用的最多。

Stream类的某些方法对基本类型和装箱类型进行了区分,目的是减少装箱拆箱的性能开销。

default方法出现的意义

实现了库接口的自定义类,在库接口添加新方法时,可以在不改变客户端自定义类的情况下,使得自定义类正常运行。因为新添加的方法类型为default,这样自定义的类虽然没有实现这个接口方法,但是自动拥有了这个方法,因为库接口提供了这个方法的默认实现。

Optional新增数据类型

功能:

用于替换null

使用Optional的目的

Optional对象鼓励程序员适时检查变量是否为空。

它将一个类的API中可能为空的值文档化,更适合阅读。

8.数据并行化

数据并行化的必要性

多核CPU的出现,需要通过并行化的code来提升现有代码的计算能力,而不再依赖提升CPU的时钟频率。

阿姆达尔定律

预测了搭载多核CPU的机器提升速度的理论最大值。例如,如果将一段完全串行化的code,一半改为并行化处理,则CPU>=2的所有情况中,理论上最大速度都是原来的2倍。因此,可以得出结论,问题的求解时间,完全取决于:问题可以被分解为几个部分

影响并行流性能的5个因素

数据大小。因为涉及到数据分解、合并的开销。

源数据结构。因为这涉及数据分割的开销。

装箱。

核的数量。这里核的数量是指:运行时,机器能使用的核的数量,而不是机器上有多少核。

单元处理开销。单元处理开销时间越长,并行操作带来的性能提升越明显。

核心类库的通用数据结构分类

分类标准

长度是否确定,结构是否复杂两方面考虑。

性能好(长度确定,线性结构)

如ArrayList,数组,Intstream.range等。支持随机读取,易分解。

性能一般(结构复杂,tree/hash类型)

如HashSet,TreeSet等,不易公平分解。

性能差(长度不定)

如LinkedList,分解时间复杂度为:O(N)。

java8对数组新增的并行化操作方法

Arrays.parallelPrefix,计算数组的和

Arrays.parallelSetAll,更新数组元素

Arrays.parallelSort,对数组元素排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值