limit()是java stream api的短路型中间操作,接收非负long参数,返回由原流前n个元素组成的新流;对无限流可转为有限流,与skip组合实现分页,应置于昂贵操作之前以提升性能。

Java Stream API 中的 limit() 是控制数据流向的核心中间操作之一,它不改变原始数据,而是按需截取流中前 N 个元素,形成新流。关键在于它属于短路操作,遇到足够元素就提前终止,对无限流或大数据集尤其高效。
limit 的基本行为和参数要求
方法签名是 Stream
- maxSize 为 0:返回空流;
- maxSize 为正数:最多取前 maxSize 个元素;
- maxSize 超过流长度:返回全部元素,不报错;
- maxSize 为负数:抛出 IllegalArgumentException。
limit 与 skip 配合实现精准分页
单独 limit 只能取“开头”,要获取中间段(比如第 4~8 条),必须先 skip 再 limit:
- skip(3) 跳过索引 0、1、2 的前三项;
- limit(5) 在剩余流中取前五项;
- 组合效果等价于“从下标 3 开始取 5 个”,即第 4 到第 8 个元素(含);
- 注意顺序不可颠倒:limit 写在 skip 前会截断原始流,导致 skip 失效。
limit 在不同流类型下的行为差异
串行流中 limit 严格保序;并行流中则不保证顺序:
- 串行流:list.stream().limit(3).collect(...) 总是返回前三个原始顺序元素;
- 并行流:list.parallelStream().limit(3) 可能返回任意三个元素,顺序不确定;
- 若需并行处理 + 有序截取,应先 collect 成集合再用 subList,或改用串行流。
limit 的典型使用时机和优化建议
它不是万能过滤器,适合在明确需要“前 N”语义的场景:
- 分页查询(配合 skip)、热门榜单取 Top N、日志预览前几条;
- 放在 filter/sorted 后更高效:先筛选/排序再 limit,避免处理无用数据;
- 避免在无限流(如 Stream.generate)前漏用 limit,否则会永远运行;
- limit 返回仍是 Stream,必须接终端操作(如 collect、forEach)才能触发执行。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











