Java 中的 Stream skip() 方法及示例

2025年1月7日 | 阅读 6 分钟

Java 中的 Stream.skip(long n) 方法是 Java 8 引入的 Stream API 的重要组成部分。它使开发人员能够构建对数据集进行操作的管道。skip() 方法在处理剩余元素时跳过一定数量的元素特别有用。

方法签名

Stream<T>: 该方法返回一个新的流,其类型与原始流 T 相同。

skip(long n): skip 方法本身的名字表明它会跳过流中的元素。参数 n 表示应该跳过多少个元素。

long n: 这是一个 long 类型的单个参数,表示要从流的开头跳过的项数。如果 n 大于流中的元素数量,则结果流将为空。

示例 1:跳过整数列表中的元素

在此示例中,我们将创建一个名为 numbers 的整数列表,其中包含从 1 到 10 的元素。然后,我们将使用 stream 操作将列表 numbers 转换为流。在流上调用 skip(5) 方法,该方法跳过流的前 5 个元素。collect(Collectors.toList()) 方法将流的剩余元素收集到一个新列表中。

文件名: SkipExample.java

输出

 
[6, 7, 8, 9, 10]   

示例 2:过滤并对剩余数字进行平方后跳过偶数

在此示例中,我们将创建一个名为 numbers 的整数列表,其中包含从 1 到 10 的元素。filter(n -> n % 2 == 0) 方法过滤流以仅包含偶数。在过滤后的流上调用 skip(2) 方法,该方法跳过过滤后的流的前 2 个元素。map(n -> n * n) 方法用于对流中剩余的每个数字进行平方。collect(Collectors.toList()) 方法将平方后的数字收集到一个新列表中。

文件名: SkipWithConditionExample.java

输出

 
[36, 64, 100]   

示例 3:跳过满足条件的字符串

在此示例中,我们将创建一个名为 words 的字符串列表,其中包含各种国家名称。然后,我们将列表 words 转换为流,从而可以使用流操作。filter(word -> word.startsWith("A")) 方法过滤流以仅包含以字母“A”开头的字符串。在过滤后的流上调用 skip(2) 方法,该方法跳过过滤后的流的前 2 个元素。

文件名: SkipWithConditionExample1.java

输出

 
[Austria]   

示例 4:根据条件跳过复杂对象

在此示例中,我们将创建一个名为 people 的 Person 对象列表,每个对象都初始化了姓名和年龄。people.stream() 将 Person 对象列表转换为流。filter(person -> person.age > 30) 过滤流以仅包含年龄大于 30 岁的人。然后调用 skip(1) 方法跳过过滤后的流中的第一个人。

文件名: SkipWithConditionExample2.java

输出

 
[Tom (40), Bob (50)]    

示例 5:跳过字符串列表中的元素并转换为大写

在此示例中,我们将创建一个名为 words 的字符串列表,其中包含元素“one”、“two”、“three”、“four”、“five”、“six”和“seven”。List<String> result = words.stream() 将列表 words 转换为流。在流上调用 skip(3) 方法以跳过前 3 个元素。map(String::toUpperCase) 方法用于将流中剩余的每个字符串转换为大写。

文件名: SkipStringExample.java

输出

 
[FOUR, FIVE, SIX, SEVEN]   

应用

1. 分页

在处理大型数据集时,通常需要将数据分成易于管理的数据块或页面。跳过元素以访问特定页面数据。例如,如果每页显示 10 个项目,要获取第 3 页,您需要跳过前 20 个项目。

2. 负载均衡

在分布式系统或并行处理中,需要将工作分配给多个处理器或服务器。跳过一部分任务以在不同节点之间平衡负载,确保每个节点处理的任务集是唯一的。

3. 顺序数据处理

在时间序列数据或任何顺序数据处理中,需要忽略某些初始条目。跳过预定义数量的初始条目以专注于数据序列中的特定范围。