读Java实战(第二版)笔记04_用流收集数据

1. 方便程序员和可读性是头等大事!

1.1. 函数式API设计更易复合和重用

2. 归约和汇总为一个值

2.1. counting()

2.1.1. 计数

2.2. maxBy

2.2.1. 查找流中的最大值

2.3. minBy

2.3.1. 查找流中的最小值

2.4. summingInt

2.4.1. 可接受一个把对象映射为求和所需int的函数,并返回一个收集器

2.5. summingLong

2.5.1. 可接受一个把对象映射为求和所需long的函数,并返回一个收集器

2.6. summingDouble

2.6.1. 可接受一个把对象映射为求和所需double的函数,并返回一个收集器

2.7. 求和

2.8. averagingInt

2.9. averagingLong

2.10. averagingDouble

2.11. 平均值

2.12. summarizing

2.13. summarizingInt

2.13.1. IntSummary Statistics类型

2.14. summarizingLong

2.14.1. LongSummary Statistics类型

2.15. summarizingDouble

2.15.1. DoubleSummaryStatistics类型

2.16. 数出元素的个数,并得到总和、平均值、最大值和最小值

2.17. joining

2.17.1. 连接

2.17.2. 重载版本可以接受元素之间的分界符

2.18. reducing

2.18.1. 归约

2.18.2. 旨在把两个值结合起来生成一个新值,它是一个不可变的归约

2.18.3. 使用泛型?通配符

2.18.3.1. 累加器本身可以是任何类型

2.18.4. 使用允许提供默认值的方法,如orElse或orElseGet来解开Optional中包含的值更为安全

2.19. collect

2.19.1. 适合并行操作

2.19.2. 特别适合表达可变容器上的归约

3. 元素分组

3.1. “桶”

3.2. groupingBy

3.2.1. 传递了一个Function(以方法引用的形式)

3.2.1.1. Function是分类函数

3.2.2. 单参数groupingBy(f)

3.2.2.1. 双参数groupingBy(f, toList())的简便写法

3.2.3. 双参数

3.2.3.1. 第二变量也接受一个Collector类型的参数

3.2.3.2. 过滤谓词挪到了第二个Collector中

3.2.3.3. 第二个收集器可以是任何类型,而不一定是另一个groupingBy

3.3. 多级分组

3.3.1. 由双参数版本的groupingBy工厂方法创建的收集器

4. 元素分区

4.1. 分组的特殊情况

4.1.1. 使用返回一个布尔值的单参数函数的谓词作为分组函数(分区函数)

4.1.2. 保留了分区函数返回true或false的两套流元素列表

4.2. partitioningBy

4.2.1. 可传递第二个收集器

5. 转换为另一种类型

5.1. collectingAndThen

5.2. 要转换的收集器以及转换函数,并返回另一个收集器

6. 收集器接口

6.1.

        public interface Collector<T, A, R> {
            Supplier<A> supplier();
            BiConsumer<A, T> accumulator();
            Function<A, R> finisher();
            BinaryOperator<A> combiner();
            Set<Characteristics> characteristics();
        }

6.1.1. 说明

6.1.1.1. T是流中要收集的项目的泛型

6.1.1.2. A是累加器的类型,累加器是在收集过程中用于累积部分结果的对象

6.1.1.3. R是收集操作得到的对象(通常但并不一定是集合)的类型

6.2. supplier方法

6.2.1. 必须返回一个结果为空的Supplier,也就是一个无参数函数,在调用时它会创建一个空的累加器实例,供数据收集过程使用

6.3. accumulator方法

6.3.1. 会返回执行归约操作的函数

6.4. finisher方法

6.4.1. 必须返回在累积过程的最后要调用的一个函数,以便将累加器对象转换为整个集合操作的最终结果

6.4.2. identity函数

6.4.2.1. 恒等函数

6.4.2.2. 一个函数仅仅是返回其输入参数

6.5. combiner方法

6.5.1. 会返回一个供归约操作使用的函数

6.6. characteristics方法

6.6.1. 会返回一个不可变的Characteristics集合

6.6.2. 定义了收集器的行为

6.6.2.1. UNORDERED

6.6.2.1.1. 归约结果不受流中项目的遍历和累积顺序的影响

6.6.2.2. CONCURRENT

6.6.2.2.1. accumulator函数可以从多个线程同时调用,且该收集器可以并行归约流

6.6.2.2.2. 如果收集器没有标为UNORDERED,那它仅在用于无序数据源时才可以并行归约

6.6.2.3. IDENTITY_FINISH

6.6.2.3.1. 表明完成器方法返回的函数是一个恒等函数,可以跳过

6.7. 进行自定义收集而不去实现Collector

6.7.1. collect方法可以接受另外三个函数——supplier、accumulator和combiner,其语义和Collector接口的相应方法返回的函数完全相同

7. Collectors类的静态工厂方法

7.1. import static java.util.stream.Collectors.*;

7.2. toList

7.2.1. 把流中所有的元素收集到一个List中

7.3. mapping

7.3.1. 提供了另一个Collector函数,它接受一个映射函数和另一个Collector函数作为参数

7.3.2. 使用一个映射函数对它们进行转换

7.4. filtering

7.4.1. 接受一个谓词对每一个分组中的元素执行过滤操作

7.5. toCollection

7.5.1. 对于是什么类型有更多的控制

7.6.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据结构与算法是计算机科学中非常重要的概念。在Java中,有许多常见的数据结构和算法的实现。其中,数据结构包括数组、链表、栈、队列、跳表、散列表、二叉树、堆、图和Trie树。而算法包括递归、排序、二分查找、哈希算法和字符串匹配算法。\[1\] 在Java中,我们可以使用散列表(哈希表)来实现数据结构。而在字符串匹配算法中,有四种常见的算法:暴力匹配算法(BF算法)、RK算法、BM算法和KMP算法。这些算法都有各自的特点和适用场景。\[2\] 另外,在Java开发中,排序是一种常见的需求。我们可以使用一些常见的排序算法来对数据元素进行排序,比如按照日期对订单进行排序,按照价格对商品进行排序等等。在Java开发工具包(JDK)中,已经提供了许多数据结构和算法的实现,比如List、Set、Map和Math等。我们可以借鉴JDK的方式,将算法封装到某个类中,并进行API的设计和实现。\[3\] 综上所述,数据结构与算法在Java中有着广泛的应用,通过学习和使用这些概念和实现,我们可以更好地解决问题和优化程序。 #### 引用[.reference_title] - *1* *2* [Java数据结构和算法学习笔记](https://blog.csdn.net/zth13015409853/article/details/121946203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [数据结构与算法(Java篇)笔记--Comparable接口](https://blog.csdn.net/csh1807266489/article/details/126782378)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值