Java中skip方法用于跳过流开头指定数量元素,返回新流;属中间操作,需终止操作触发;参数n为非负长整型,n≤0时返回原流,n超元素数时返回空流,支持无限流但需防无界消费。

Java 中的 skip 方法用于跳过流(Stream)中开头的指定数量元素,返回一个丢弃前 n 个元素后的新流。它属于中间操作,不会立即执行,需配合终止操作(如 forEach、collect 等)才生效。
skip 的基本用法
skip(long n) 接收一个非负长整型参数 n,表示要跳过的元素个数:
- 若
n小于等于 0,等价于不跳过,返回原流; - 若
n大于流中总元素数,结果为空流(不抛异常); - 对无限流(如
Stream.iterate)也有效,但需注意避免无界消费。
常见使用示例
例如从一个整数列表中跳过前两个元素并打印剩余值:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.skip(2)
.forEach(System.out::println); // 输出:3, 4, 5
再比如处理字符串数组,跳过前 3 个并收集为新列表:
立即学习“Java免费学习笔记(深入)”;
String[] words = {"a", "b", "c", "d", "e", "f"};
List<String> result = Arrays.stream(words)
.skip(3)
.collect(Collectors.toList()); // ["d", "e", "f"]
skip 和 limit 组合实现分页
实际开发中常与 limit 配合模拟“第 n 页、每页 m 条”逻辑:
- 跳过
(page - 1) * size个元素,再取size个; - 注意:流不支持随机访问,该方式适合小数据量或已排序的有限流;大数据建议用数据库分页。
示例(获取第 2 页,每页 2 条):
List<Integer> data = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
List<Integer> page2 = data.stream()
.skip(2) // 跳过前 2 个(第1页)
.limit(2) // 取 2 个(第2页内容)
.collect(Collectors.toList()); // [3, 4]
注意事项和限制
skip 在并行流中仍按顺序跳过,但性能可能下降,因为需确保前 n 个元素被“消耗”;
- 对基于源(如
ArrayList)的流,skip时间复杂度接近 O(n); - 对 I/O 流或远程数据源,
skip不会减少实际读取量,只是过滤已加载元素; - 不能在已调用终止操作的流上重复使用
skip(流只能消费一次)。


















