发布时间:2023-01-28 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印

读Java8函数式编程笔记03_高级集合类和收集器

1.方法引用

1.1.一种引用方法的轻量级语法

1.1.1.提供了一种简短的语法

1.1.2.标准语法为Classname::methodName

1.2.凡是使用Lambda表达式的地方,就可以使用

1.3.自动支持多个参数

1.3.1.前提是选对了正确的函数接口

2.出现顺序

2.1.流是有序的

2.1.1.流中的元素都是按顺序处理的

2.2.依赖于数据源和对流的操作

2.3.在一个有序集合中创建一个流时,流中的元素就按出现顺序排列

2.3.1.List

2.4.如果集合本身就是无序的,由此生成的流也是无序的

2.4.1.HashSet

2.5.一些操作在有序的流上开销更大,调用unordered方法消除这种顺序就能解决该问题

2.6.大多数操作都是在有序流上效率更高,比如filter、map和reduce等

2.7.使用并行流时,forEach方法不能保证元素是按顺序处理的

2.7.1.如果需要保证按顺序处理,应该使用forEachOrdered方法

3.收集器

3.1.可用来计算流的最终值,是reduce方法的模拟

3.1.1.生成最终结果的一剂配方

3.1.2.一种通用的、从流生成复杂值的结构

3.2.转换成其他集合

3.2.1.已有代码是为集合编写的,因此需要将流转换成集合传入

3.2.2.在集合上进行一系列链式操作后,最终希望生成一个值

3.2.3.写单元测试时,需要对某个具体的集合做断言

3.2.4.toList

3.2.5.toSet

3.2.6.toCollection

3.3.转换成值

3.3.1.maxBy

3.3.2.minBy

3.3.3.按某种特定的顺序生成一个值

3.3.4.averagingInt

3.3.4.1.接受一个Lambda表达式作参数,将流中的元素转换成一个整数,然后再计算平均数

3.4.数据分块

3.4.1.分解成两个集合

3.4.2.partitioningBy

3.4.2.1.接受一个流,并将其分成两部分

3.5.数据分组

3.5.1.使用任意值对数据分组

3.5.2.groupingBy

3.5.2.1.接受一个分类函数,用来对数据分组

3.5.2.2.类似SQL中的group by操作

3.6.字符串

3.6.1.joining

3.7.其他

3.7.1.counting

3.7.2.mapping

3.7.2.1.在收集器的容器上执行类似map的操作。但是需要指明使用什么样的集合类存储结果

3.7.3.summarizingLong

3.7.4.reducing

3.8.下游收集器

3.8.1.生成部分结果的配方

3.8.2.主收集器中会用到下游收集器

3.9.特征

3.9.1.一组描述收集器的对象,框架可以对其适当优化

3.9.2.characteristics方法定义了特征