《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.10 群组和分区

1.10 群组和分区

在上一节中,你看到了如何收集给定国家的所有语言,但是其处理显得有些冗长。你必须为每个映射表的值都生成单例集,然后指定如何将现有集与新集合并。将具有相同特性的值群聚成组是非常常见的,并且groupingBy方法直接就支持它。
让我们来看看通过国家来群组Locale的问题。首先,构建该映射表:

注意:快速复习一下地点:每个Locale都有一个语言代码(例如英语的en)和一个国家代码(例如美国的US)。Locale en_US描述的是美国英语,而en_IE是爱尔兰英语。某些国家有多个Locale。例如,ga_IE是爱尔兰的盖尔语,而前面的示例也展示了我的JVM知道瑞士有三个Locale。
当分类函数是断言函数(即返回boolean值的函数)时,流的元素可以分区为两个列表:该函数返回true的元素和其他的元素。在这种情况下,使用partitioningBy比使用groupingBy要更高效。例如,在下面的代码中,我们将所有Locale分成了使用英语和使用所有其他语言的两类:

注意:如果调用groupingByConcurrent方法,就会在使用并行流时获得一个被并行组装的并行映射表。这与toConcurrentMap方法完全类似。
java.util.stream.Collector 8

产生一个收集器,它会产生一个映射表,其键是true/false,而值是由满足/不满足断言的元素构成的列表。

时间: 2024-08-25 17:58:45

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.10 群组和分区的相关文章

《Java语言导学(原书第6版)》一导读

前 言 自2010年年初Oracle公司收购Sun公司以来,Java语言迎来激动人心的时代.正如Java Community Process计划的活动所印证的,Java语言将不断发展.本书基于Java SE 8(Java Platform Standard Edition 8)并引用其API. 相比本书第5版(针对的是Java版本7),第6版有一些新特点: Lambda表达式使得功能可作为方法参数使用,代码作为数据使用.Lambda表达式描述单个方法接口(也称为功能接口)的实例会更简洁.4.4.

《Java语言导学(原书第6版)》一1.1 关于Java技术

1.1 关于Java技术 大家都在谈Java技术,但Java技术到底是什么?本节解释Java技术如何成为程序语言和平台,并概述Java技术的功能特性. 1.1.1 Java程序语言 Java程序语言是一种高级的编程语言,它具备如下性质: 简单 面向对象 分布式 多线程 动态 架构中立 可移植 高性能 强壮 安全 上述术语的定义可参考James Gosling和Henry McGilton的白皮书<The Java Language Environment>. 图1-1描述了Java应用程序开发

《Java语言导学(原书第6版)》一一1.1 关于Java技术

1.1 关于Java技术 大家都在谈Java技术,但Java技术到底是什么?本节解释Java技术如何成为程序语言和平台,并概述Java技术的功能特性.1.1.1 Java程序语言 Java程序语言是一种高级的编程语言,它具备如下性质: 简单 面向对象 分布式 多线程 动态 架构中立 可移植 高性能 强壮 安全 上述术语的定义可参考James Gosling和Henry McGilton的白皮书<The Java Language Environment>. 图1-1描述了Java应用程序开发的

《Java语言导学(原书第6版)》一1.2 “Hello World!”实例程序

1.2 "Hello World!"实例程序 本节详细介绍编译和运行"Hello World!"实例程序的指令.1.2.1节介绍利用集成开发环境NetBeans IDE开发该程序的过程.NetBeans IDE在Java平台上运行,也就是说可在任何配置了JDK的操作系统上运行NetBeans IDE,包括Microsoft Windows.Solaris.Linux和OS X.建议尽可能使用NetBeans IDE取代命令行.1.2.2节和1.2.3节依次介绍不使用

《Java语言导学(原书第6版)》一一1.2 “Hello World!”实例程序

1.2 "Hello World!"实例程序 本节详细介绍编译和运行"Hello World!"实例程序的指令.1.2.1节介绍利用集成开发环境NetBeans IDE开发该程序的过程.NetBeans IDE在Java平台上运行,也就是说可在任何配置了JDK的操作系统上运行NetBeans IDE,包括Microsoft Windows.Solaris.Linux和OS X.建议尽可能使用NetBeans IDE取代命令行.1.2.2节和1.2.3节依次介绍不使用

《Java语言导学(原书第6版)》一一2.3 继承

2.3 继承通常,不同的对象也会有一些相同的地方.比如,山地车.公路车和协力车都具备自行车的属性:当前速度.当前踏板频率.当前档位等.但它们也有各自的特性:协力车有两个座垫和两个车把,公路车有赛车车把,有些山地车有其他链条以降低变速比.在面向对象编程中,类可以继承其他类的常用状态和行为.在上述例子中,Bicycle是MountainBike.RoadBike和TandemBike的超类(superclass).在Java程序语言中,每个类只能有一个直接超类,每个超类都潜在地有无限多个子类(sub

《Java语言导学(原书第6版)》一2.3 继承

2.3 继承 通常,不同的对象也会有一些相同的地方.比如,山地车.公路车和协力车都具备自行车的属性:当前速度.当前踏板频率.当前档位等.但它们也有各自的特性:协力车有两个座垫和两个车把,公路车有赛车车把,有些山地车有其他链条以降低变速比.在面向对象编程中,类可以继承其他类的常用状态和行为.在上述例子中,Bicycle是MountainBike.RoadBike和TandemBike的超类(superclass).在Java程序语言中,每个类只能有一个直接超类,每个超类都潜在地有无限多个子类(su

《Java语言导学(原书第6版)》一一3.1 变量

3.1 变量 根据第2章可知,对象的状态存储在字段中: 2.1节已经介绍了字段的概念,但读者仍可能会问:命名字段有什么规则和约定?除了整型,是否还有其他数据类型?字段在声明时是否必须初始化?如果字段没有显式初始化,该字段是否会被赋予一个默认值?本章将会详细解答这些问题.但在此之前,先要明确一些技术差别.Java程序语言同时使用字段和变量.对于新的开发人员而言,这是造成概念混淆的主要原因,因为两者经常看似指代同一个事物.Java程序语言定义了如下变量: 实例变量(非静态字段).就技术而言,对象将个

《Java语言导学(原书第6版)》一3.1 变量

3.1 变量 根据第2章可知,对象的状态存储在字段中: 2.1节已经介绍了字段的概念,但读者仍可能会问:命名字段有什么规则和约定 除了整型,是否还有其他数据类型?字段在声明时是否必须初始化?如果字段没有显式初始化,该字段是否会被赋予一个默认值?本章将会详细解答这些问题.但在此之前,先要明确一些技术差别.Java程序语言同时使用字段和变量.对于新的开发人员而言,这是造成概念混淆的主要原因,因为两者经常看似指代同一个事物.Java程序语言定义了如下变量: 实例变量(非静态字段).就技术而言,对象将个

《Java语言导学(原书第6版)》一1.4 常见问题(及其解决方案)

1.4 常见问题(及其解决方案) 1.4.1 编译器问题 该错误消息说明Windows系统没有找到编译器(javac).有一个办法可以解决该问题.假设JDK安装在目录C:\jdk 1.8.0下.在提示符下输入下述命令并按回车键: 这样设置后,每次编译或运行程序时,都要执行命令C:\jdk1.8.0\bin\javac或C:\jdk1.8.0\bin\java.更新PATH变量可避免这种重复输入,详情参考<JDK 8安装指南>. 该错误消息说明编译时忘记输入.java后缀.切记,编译命令是jav