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