1 filter过滤操作
方法接受一个类型的参数,用于过滤Stream中的元素,并返回符合条件的元素组成的新Stream。map映射操作
2 map映射操作
方法接受一个类型的参数,用于将一个元素转换为另一个元素,并返回一个新的Stream。
3 flatMap扁平化操作
方法与方法类似,不同之处在于方法的参数是一个函数,该函数将一个元素映射成一个Stream,最终将这些Stream合并成一个新的Stream。
4 distinct去重操作
方法会返回一个去除重复元素后的新Stream。
5 sorted排序操作
方法接受一个可选的比较器,将Stream中的元素按照指定方式(默认为自然顺序)进行排序,返回一个新的Stream。
可以通过传递一个比较器来指定排序方式:
6 peek查看操作
方法接受一个类型的参数,可以在Stream中的每个元素执行所提供的操作,该方法不会影响Stream的元素。
7 limit截取操作
方法用于截取Stream中指定数量的元素,返回一个新的Stream。
2.2 终止操作
2.2.1 forEach遍历操作
方法接受一个类型的参数,对Stream中的每个元素执行所提供的操作。
2.2.2 toArray转换为数组操作
方法将Stream中的元素转换为一个数组。
2.2.3 reduce规约操作
方法用于将Stream中的所有元素结合成一个结果。它接受一个类型的参数,该参数定义了对Stream中的元素进行连续计算的方式。
2.2.4 collect收集操作
方法将Stream中的元素收集到一个集合中。它接受一个类型的参数,该参数定义了如何收集Stream中的元素。
2.2.5 min、max、count等聚合操作
、、等方法都是求Stream中元素的一些统计信息。
2.2.6 anyMatch、allMatch、noneMatch等匹配操作
、、等方法用于判断Stream中的元素是否满足特定条件。
2.2.7 findFirst、findAny等查找操作
、等方法用于返回Stream中的任意一个元素(如果存在)。
4.1 示例1:数据筛选与统计
假设有一个员工列表,每个员工有姓名、部门和薪水三个属性。现在需要对这个员工列表进行筛选和统计操作。具体要求如下:
- 筛选出薪水大于5000的员工;
- 按照部门对员工进行分组,并计算每个部门的平均薪水和员工数量;
- 对符合条件的员工按照薪水从高到低进行排序;
- 计算所有员工的平均薪水和最高薪水。
4.1.1 准备数据
首先,我们需要准备一组员工数据来模拟实际情况。假设我们有以下员工数据:
其中,类的定义如下:
4.1.2 筛选出符合条件的员工
使用方法对员工列表进行筛选,只保留薪水大于5000的员工:
输出结果为:
4.1.3 对员工列表进行分组和聚合
使用方法对员工列表进行分组,并使用方法进行值的转换和计算操作。
输出结果为:
4.1.4 对符合条件的员工按照薪水从高到低排序
使用方法对员工列表进行排序操作,此处使用方法使其按照降序排列。
输出结果为:
4.1.5 计算员工薪水的平均值和最高值
使用方法将员工列表中的薪水属性转换为整型,并使用方法和方法进行统计计算。
输出结果为:
完整代码如下:
输出结果为:
4.2 示例2:对象属性映射与转换
当我们需要在不同的数据类型之间进行转换时,可以使用Java 8中提供的方法来实现。
假如我们有一个订单列表,每个订单包含订单号和一个包含多个商品的列表。我们需要将订单列表转换为商品列表,具体要求如下:
- 订单号和商品名称作为转换后的商品对象的属性;
- 转换后的商品数量为订单中所有商品的总和。
首先,我们需要定义和两个类来表示订单和商品:
接下来,我们生成一组订单数据来进行转换操作:
然后,我们使用方法将订单列表展开成商品流,再使用方法完成属性转换和计算操作:
输出结果为:
完整代码如下:
4.3 示例3:多级分组与聚合
在复杂的数据集中,通常需要对数据进行多级分组和聚合操作。Java 8中提供了方法来实现多级分组,同时也可以使用嵌套的方法来实现多个分组条件的组合。
假设有一个学生列表,每个学生有姓名、性别、院系和年龄等属性。现在需要按照院系和性别对学生进行分组,并计算每个组的平均年龄和学生数量。
首先,我们需要准备一组学生数据来模拟实际情况。假设我们有以下学生数据:
其中,类的定义如下:
接下来,我们使用方法对学生列表进行多级分组和聚合操作,并使用方法进行值的转换和计算操作。由于多级分组的代码比较长,因此我们将其拆分成两个步骤进行操作。
首先,按照院系和性别进行分组,然后使用方法将年龄属性转换为整型,并使用方法对整型进行平均值计算:
然后,我们使用方法遍历分组结果,并输出每个组的统计信息:
输出结果为:
完整代码如下: