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 协议 ,转载请注明出处!