首页 > 编程语言 >读Java实战(第二版)笔记04_用流收集数据

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

时间:2023-02-08 07:55:05浏览次数:45  
标签:返回 Java 函数 04 收集器 6.6 归约 3.2 用流

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.


标签:返回,Java,函数,04,收集器,6.6,归约,3.2,用流
From: https://www.cnblogs.com/lying7/p/17100397.html

相关文章

  • javascript:DOM/BOM练习
    javascript:DOM/BOM练习    一、BOM/DOM练习内容1<!DOCTYPEhtml>2<html>3<head>4<metacharset="utf-8">5<title>菜鸟教程(runoob.com)</t......
  • jmap查看java进程占用的数据库连接数
    https://codeleading.com/article/62714982205/存活的连接jmap-histo:live96984|grepcom.mysql.jdbc.JDBC4Connection总共的连接对象jmap-histo96984|grepc......
  • 记一次Java崩溃崩溃问题——IPv6 与 glibc的bug
    最近一段时间,项目组的后端和APP端进行联调的时候,会发现测试服务器的后端服务器会经常莫名其妙地崩溃,最后会生成一份崩溃日志(hs_err_pid.log)。日志的大概信息如下:##Afat......
  • BUUCTF Java逆向解密 RE
    Java逆向,百度一下采用Jadx-gui打开后得到如下代码packagedefpackage;importjava.util.ArrayList;importjava.util.Scanner;/*renamedfrom:Reversereason:d......
  • java创建线程的方式有几种?
    java中创建线程的方式有多少种,这个问题也是众多纷纭,这个时候更应该参考官方文档(https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html)了,文档很明确地指出......
  • JavaScript五花八门的跳转方式
    我们最常见的跳转方式是location.href="http://www.baidu.com",这种是最常见的,但是常常使用location.replace,location.assign,,window.open,history.replaceState,location.......
  • Java07
    一、面向过程&面向对象1.面向过程:线性思维,处理简单问题2.面向对象:分类,复杂问题 二、面向对象(OOP)1.本质:以类的方式组织代码,以对象的组织(封装)数据。......
  • java面试题(四)
    1.java面试题(四)1.1cap理论,base理论1.Consistency(一致性):即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致。对于客户端来说,一致性指的是并发访问......
  • java——spring boot集成redis——首先进行复习——本机环境安装(windows环境下)
    鉴于之前学习的时候已经安装完成,此处不重复安装,有需要的可以参考网上各种教程。 本章节以黑马教程为准开始进行复习和学习,进一步提高后端能力 黑马教程:redis——B站......
  • zzul1058_Java
    importjava.util.Scanner;publicclasszzul1058{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intn=inpu......