java循环结构通过配合条件判断、集合操作和资源管理实现数据清理与存储:for循环用于批量清理过期缓存(先收集key再统一删除),while循环用于队列消费落库(批量+超时),增强for用于轻量数据过滤(新建列表),try-with-resources保障文件写入可靠性。

Java 中循环结构本身不直接“控制”数据清理与存储,而是通过配合条件判断、集合操作、资源管理等机制,在循环体内实现数据的筛选、处理、暂存或持久化。关键在于明确“清理什么”“存储到哪”“何时触发”,再用 for / while / enhanced for 精准驱动流程。
用 for 循环批量清理过期缓存对象
常见场景:内存中维护了一个 Map
说明:不能边遍历边 remove(会抛 ConcurrentModificationException),应先收集待删 key,再统一删除。
- 声明一个临时 List
存放过期 key - 用普通 for 或增强 for 遍历 map.entrySet(),比较 item.expireTime
- 满足条件则 add 到待删列表,循环结束后调用 map.keySet().removeAll(expiredKeys)
用 while 循环持续消费队列并落库
典型应用:从 BlockingQueue
说明:while(true) + 超时控制 + 批量缓冲,兼顾实时性与吞吐量。
- 初始化 List
batch = new ArrayList(100) - while(!Thread.currentThread().isInterrupted()) 中调用 queue.poll(2, TimeUnit.SECONDS)
- 拿到非 null event 就 add 进 batch;若为 null 且 batch 非空,则执行 jdbcTemplate.batchUpdate(...)
- 注意捕获 InterruptedException 并安全退出
用增强 for 遍历 List 并原地过滤无效数据
适用轻量清洗:如从接口返回的 List
说明:不推荐在增强 for 中修改原集合,应新建结果列表或使用 Stream。
- 创建 List
validUsers = new ArrayList() - 增强 for 遍历原始 list,对每个 user 调用 isValidMobile(user.getPhone())
- 校验通过则 add 到 validUsers,后续可直接传给 DAO 层 saveAll()
- 如需复用原引用且确定无并发,也可用 Iterator.remove() 安全删除
结合 try-with-resources 保证循环中文件写入可靠性
当循环生成大量日志行并写入本地文件时,必须确保流正确关闭,避免句柄泄漏或数据丢失。
说明:将 FileWriter 包裹进 try-with-resources,即使循环中途异常,close() 仍自动执行。
- 定义 try (BufferedWriter writer = Files.newBufferedWriter(Paths.get("output.log")))
- 循环内每次拼接一行字符串,调用 writer.write(line); writer.newLine();
- 无需手动 flush 或 close,JVM 保证资源释放;如需立即刷盘,可在循环中定期 writer.flush()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











