JAVA8-Java8的流式编程-高级篇
本文最后更新于:September 2, 2022 pm
JAVA8 是一个有里程碑的一个版本,提供了很多的新特性。Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。
目录
Comparator
comparing
提取对象属性,按照指定规则排序。
comparing
是比较器功能接口的静态方法。Comparator.comparing
接受一个函数,该函数从给定类型中提取一个可比较的排序键,并返回一个通过该排序键进行比较的比较器。
例如:
传递一个函数,它将从一个类型
T
中提取一个可比较的排序键,并返回一个通过该排序键进行比较的比较器。
1 |
|
传递一个函数(
Function
)和一个比较器(Comparator
)。该方法将从一个类型T
中提取一个排序键,并返回一个比较器,使用指定的比较器对该排序键进行比较。
1 |
|
对于int
、long
和double
数据类型的排序键,比较器分别有comparingInt
、comparingLong
和comparingDouble
方法。
示例
实体类:
1 |
|
测试:
1 |
|
在上面使用Collections.sort
对集合进行排序。也可以使用Stream.sorted
、List.sort
和Arrays.sort
来使用比较器对集合进行排序。
其他用法示例
1 |
|
降序(含多属性比较)
实现方式多,这里就不做演示了,或者直接看总结。
实现降序有很多种方法,如下:(推荐先见下面的总结再看以下内容)
1 |
|
总结
- Comparator.comparing(类::属性一).reversed():先将属性一按照升序进行排序,再将结果按照属性一进行降序。
- Comparator.comparing(类::属性一,Comparator.reverseOrder()):直接将属性一进行降序排序。
Collectors
类 java.util.stream.Collectors
实现了 java.util.stream.Collector
接口,同时又提供了大量的方法对流 ( stream
) 的元素执行 map
and
reduce
操作,或者统计操作。
Collectors的方法如下:
方法名 | 描述 |
---|---|
toList | 将流中的元素放置到一个列表集合中。这个列表默认为ArrayList。 |
toSet | 将流中的元素放置到一个无序集set中。默认为HashSet。 |
toCollection | 将流中的元素全部放置到一个集合中,这里使用Collection,泛指多种集合。 |
toMap | 根据给定的键生成器和值生成器生成的键和值保存到一个map中返回,键和值的生成都依赖于元素,可以指定出现重复键时的处理方案和保存结果的map。 |
toConcurrentMap | 与toMap基本一致,只是它最后使用的map是并发Map:ConcurrentHashMap |
joining | 将流中的元素全部以字符序列的方式连接到一起,可以指定连接符,甚至是结果的前后缀。内部拼接使用的Java8的新类StringJoiner,可定义连接符和前缀后缀。 |
mapping | 先对流中的每个元素进行映射,即类型转换,然后再将新元素以给定的Collector进行归纳。类似Stream.toMap。 |
collectingAndThen | 在归纳动作结束之后,对归纳的结果进行再处理。 |
counting | 元素计数 |
minBy | 最小值的Optional |
maxBy | 最大值的Optional |
summingInt | 求和,结果类型为int |
summingLong | 求和,结果类型为long |
summingDouble | 求和,结果类型为double |
averagingInt | 平均值,结果类型int |
averagingLong | 平均值,结果类型long |
averagingDouble | 平均值,结果类型double |
summarizingInt | 汇总,结果包含元素个数、最大值、最小值、求和值、平均值,值类型都为int |
summarizingLong | 汇总,结果包含元素个数、最大值、最小值、求和值、平均值,值类型都为long |
summarizingDouble | 汇总,结果包含元素个数、最大值、最小值、求和值、平均值,值类型都为 |
reducing | 统计,reducing方法有三个重载方法,其实是和Stream里的三个reduce方法对应的,二者是可以替换使用的,作用完全一致,也是对流中的元素做统计归纳作用。求和、平均值、最大值、最小值等其实就属于一种特殊的统计 |
groupingBy | 分组,得到一个HashMap |
groupingByConcurrent | 分组,得到一个ConcurrentHashMap |
partitioningBy | 将流中的元素按照给定的校验规则的结果分为两个部分,放到一个map中返回,map的键是Boolean类型,值为元素的列表List |
collectingAndThen
Collectors.collectingAndThen()
可接受两个参数,第一个参数用于 reduce
操作,而第二参数用于 map
操作。
即:先把流中的所有元素传递给第一个参数,然后把生成的集合传递给第二个参数来处理。允许我们对生成的集˚合再做一次操作。
1 |
|
输出:
1 |
|
本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/d2aa5c6d.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!