news 2026/4/18 5:32:50

278. Java Stream API - 限制与跳过操作全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
278. Java Stream API - 限制与跳过操作全解析

文章目录

  • 278. Java Stream API - 限制与跳过操作全解析
      • 🎯 本节目标
    • 🚶 `skip()` 与 `limit()` —— 基于索引的流操作
      • 📌 方法介绍
      • ⚠️ 小陷阱:操作顺序影响结果!
        • ❌ 错误思路:
      • ✅ 正确示例:取第 3 到第 7 个元素
      • 🔽 输出:
    • 🧠 `Java 9` 新特性:基于条件的筛选
      • 🌊 `dropWhile(predicate)` —— 丢弃直到不满足条件为止
        • ✅ 示例:
      • 🔽 输出:
      • 🌟 `takeWhile(predicate)` —— 保留直到不满足条件为止
        • ✅ 示例:
      • 🔽 输出:
      • 🧱 类比记忆(门的模型):
    • 🧩 实战练习建议
      • ☑️ 取前 10 个大于 50 的偶数:
      • ☑️ 取连续小于 100 的元素:
    • ✅ 总结比较

278. Java Stream API - 限制与跳过操作全解析


🎯 本节目标

  • 理解基于索引skip()limit()方法
  • 理解基于条件dropWhile()takeWhile()方法(Java 9引入)
  • 学会如何安全、高效地选择你想要的元素子集
  • 避免常见陷阱

🚶skip()limit()—— 基于索引的流操作


📌 方法介绍

方法作用
skip(n)跳过前n个元素
limit(n)保留前n个元素

这两个方法接收一个long参数,操作的是流中元素的顺序,适合用于分页、子集筛选等场景。


⚠️ 小陷阱:操作顺序影响结果!

❌ 错误思路:
ints.stream().skip(2).limit(8)

如果你想取第 3 个到第 8 个元素,这样写其实取的是第 3 到第 10 个元素(共 8 个),因为 limit 是在 skip 后的流上操作的!


✅ 正确示例:取第 3 到第 7 个元素

List<Integer>ints=List.of(1,2,3,4,5,6,7,8,9);List<Integer>result=ints.stream().skip(2)// 跳过前 2 个(得到 3, 4, 5, 6, 7, 8, 9).limit(5)// 保留前 5 个(即 3 ~ 7).toList();System.out.println("result = "+result);

🔽 输出:

result=[3,4,5,6,7]

🧠 类比记忆:
就像拿书页一样:先撕掉前2页(skip),然后从当前页开始只保留前5页(limit)。


🧠Java 9新特性:基于条件的筛选


🌊dropWhile(predicate)—— 丢弃直到不满足条件为止

📌 一旦条件为假,从那一刻开始,所有元素都保留,不再判断。

✅ 示例:
List<Integer>nums=List.of(1,2,3,4,5,0,6);List<Integer>dropped=nums.stream().dropWhile(n->n<4).toList();System.out.println("dropWhile result = "+dropped);

🔽 输出:

dropWhile result=[4,5,0,6]

📌 说明:1、2、3被丢弃;从遇到4起(第一次不满足n < 4),后续元素全都保留。


🌟takeWhile(predicate)—— 保留直到不满足条件为止

📌 一旦条件为假,后续所有元素都将被丢弃,不会再次开启

✅ 示例:
List<Integer>nums=List.of(1,2,3,4,1,0);List<Integer>taken=nums.stream().takeWhile(n->n<4).toList();System.out.println("takeWhile result = "+taken);

🔽 输出:

takeWhile result=[1,2,3]

📌 说明:当遇到4时条件不满足,后续的10都不再处理。


🧱 类比记忆(门的模型):

方法行为类比
dropWhile()丢弃直到条件不满足,门打开后一直开着门开了就不关了
takeWhile()保留直到条件不满足,门关了就不再开门关了就不开了

🧩 实战练习建议

☑️ 取前 10 个大于 50 的偶数:

List<Integer>data=IntStream.range(1,1000).boxed().toList();List<Integer>result=data.stream().filter(n->n%2==0&&n>50).limit(10).toList();

☑️ 取连续小于 100 的元素:

List<Integer>result=data.stream().takeWhile(n->n<100).toList();

✅ 总结比较

方法类型使用场景说明
skip(n)索引操作跳过前 n 个
limit(n)索引操作取前 n 个
dropWhile(p)条件操作跳过直到遇到不满足条件的值
takeWhile(p)条件操作保留直到遇到不满足条件的值
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:12:45

助农电商平台|基于springboot + vue助农电商平台系统(源码+数据库+文档)

助农电商平台 目录 基于springboot vue助农电商平台系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue助农电商平台系统 一、前言 博主介绍&…

作者头像 李华
网站建设 2026/4/12 15:05:14

Volatility3终极指南:快速掌握Linux内存取证核心技术

Volatility3终极指南&#xff1a;快速掌握Linux内存取证核心技术 【免费下载链接】volatility3 Volatility 3.0 development 项目地址: https://gitcode.com/GitHub_Trending/vo/volatility3 Volatility3是当前最强大的开源内存取证分析框架&#xff0c;专为从内存转储中…

作者头像 李华
网站建设 2026/4/11 2:53:57

彻底解决Cursor额度限制:免费无限使用的完整教程

彻底解决Cursor额度限制&#xff1a;免费无限使用的完整教程 【免费下载链接】cursor-free-everyday 完全免费, 自动获取新账号,一键重置新额度, 解决机器码问题, 自动满额度 项目地址: https://gitcode.com/gh_mirrors/cu/cursor-free-everyday 还在为Cursor Pro的免费…

作者头像 李华
网站建设 2026/4/15 1:40:02

从零搭建基于TensorFlow-v2.9的AI内容创作平台

从零搭建基于TensorFlow-v2.9的AI内容创作平台 在当今内容爆炸的时代&#xff0c;AI 正以前所未有的速度重塑内容生产方式。无论是自动生成新闻稿、创作数字艺术&#xff0c;还是为短视频生成配乐与字幕&#xff0c;背后都离不开强大而稳定的深度学习平台支持。然而&#xff0c…

作者头像 李华
网站建设 2026/4/17 22:34:38

利用TensorFlow-v2.9镜像加速AI研发:集成Conda与清华源的极致优化

利用TensorFlow-v2.9镜像加速AI研发&#xff1a;集成Conda与清华源的极致优化 在深度学习项目开发中&#xff0c;最让人头疼的往往不是模型设计本身&#xff0c;而是环境搭建——你有没有经历过为了装一个 tensorflow-gpu 花掉大半天时间&#xff1f;依赖冲突、版本不兼容、下…

作者头像 李华
网站建设 2026/4/16 23:39:22

计算机毕业设计springboot项目管理系统的招标管理模块后台管理 基于Spring Boot的企业招标管理系统后台开发与实现 Spring Boot框架下的项目招标管理平台后台构建与管理

计算机毕业设计springboot项目管理系统的招标管理模块后台管理_ry87x &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着企业项目招标规模的不断扩大&#xff0c;招标管理的复杂…

作者头像 李华