add java mapping

This commit is contained in:
xking 2024-08-15 23:26:50 +08:00
parent b85aac37da
commit f391d20a74

View File

@ -370,9 +370,21 @@ Stream 中最强大一个终止操作是 `collect()` ,它接收一个收集器
| minBy | Optional\<T> | 查找流中最小元素的 Optional | | minBy | Optional\<T> | 查找流中最小元素的 Optional |
| reducing | 规约操作产生的类型 | 对流中所有元素执行归约操作 | | reducing | 规约操作产生的类型 | 对流中所有元素执行归约操作 |
| collectingAndThen | 转换返回的类型 | 先把流中所有元素收集到指定的集合中,再对集合执行特定的操作 | | collectingAndThen | 转换返回的类型 | 先把流中所有元素收集到指定的集合中,再对集合执行特定的操作 |
| mapping | Collector<T, A, R> | 收集前转换映射 |
| groupingBy | Map<K,List\<T>> | 对流中所有元素执行分组操作 | | groupingBy | Map<K,List\<T>> | 对流中所有元素执行分组操作 |
| partitionBy | Map<Boolean,List\<T>> | 对流中所有元素执行分区操作 | | partitionBy | Map<Boolean,List\<T>> | 对流中所有元素执行分区操作 |
collectingAndThen 对比mapping
| 方面 | collectingAndThen | mapping |
| -------- | ---------------------------- | ---------------------------------- |
| 目的 | 对收集结果应用完成函数。 | 在收集之前转换元素。 |
| 转换 | 在收集结果上。 | 在元素被收集之前。 |
| 使用场景 | 需要对最终收集值进行转换时。 | 需要在收集时转换元素时。 |
| 参数 | 收集器,完成函数 | 映射函数,收集器 |
| 常见用法 | 后处理收集的数据。 | 预处理收集的元素。 |
| 示例转换 | 将集合变为不可修改。 | 将元素从一种类型转换为另一种类型。 |
使用示例如下: 使用示例如下:
```java ```java
@ -386,6 +398,7 @@ stream.collect(Collectors.summarizingInt(x -> x)); // IntSummaryStatistics{count
stream.collect(Collectors.maxBy((Integer::compareTo))); // Optional[6] stream.collect(Collectors.maxBy((Integer::compareTo))); // Optional[6]
stream.collect(Collectors.reducing(1, (a, b) -> a * b)); // 等效于 stream.reduce(1, (a, b) -> a * b); stream.collect(Collectors.reducing(1, (a, b) -> a * b)); // 等效于 stream.reduce(1, (a, b) -> a * b);
collect(Collectors.collectingAndThen(Collectors.toSet(), Set::size)); // 先把所有元素收集到Set中再计算Set的大小 collect(Collectors.collectingAndThen(Collectors.toSet(), Set::size)); // 先把所有元素收集到Set中再计算Set的大小
collect(Collectors.mapping(String::valueOf, Collectors.toList())); //将元素转为字符串并收集
``` ```
> 注意:以上每个终止操作只能单独演示,因为对一个流只能执行一次终止操作。并且执行完终止操作后,就不能再对这个流进行任何操作,否则将抛出 `java.lang.IllegalStateException: stream has already been operated upon or closed` 的异常。 > 注意:以上每个终止操作只能单独演示,因为对一个流只能执行一次终止操作。并且执行完终止操作后,就不能再对这个流进行任何操作,否则将抛出 `java.lang.IllegalStateException: stream has already been operated upon or closed` 的异常。