如何简化这段用于判断CSV空行的Java for-each循环代码?
代码简化方案
Java 8及以上版本(推荐,逻辑更简洁且效率更高)
while (results.next()) { boolean isAllEmpty = colNames.stream() .allMatch(column -> EmptyUtil.isEmpty(results.getString(column))); if (isAllEmpty) break; // 此处放置正常行的业务处理逻辑 }
优化说明:
- 移除冗余的
emptyCount计数变量,直接通过Stream的allMatch方法判断是否所有列都为空,代码语义和业务需求完全对齐,可读性更强 - 自带短路执行特性:只要检测到任意一列非空,就会终止当前行的列遍历,比原代码全量遍历所有列统计空值的执行效率更高
- 修复了原代码隐藏的bug:原代码未在每次while循环开头重置
emptyCount,如果前面行存在空单元格,计数会持续累加,大概率会出现空行误判的问题
Java 8以下版本兼容方案
while (results.next()) { boolean isAllEmpty = true; for (String column : colNames) { if (!EmptyUtil.isEmpty(results.getString(column))) { isAllEmpty = false; break; // 检测到非空列直接跳出列循环,无需继续遍历 } } if (isAllEmpty) break; // 此处放置正常行的业务处理逻辑 }
优化说明:
- 同样移除了计数变量,用布尔值直接标识当前行是否为空行,逻辑更直观
- 增加短路逻辑减少无效遍历,执行效率优于原代码
内容的提问来源于stack exchange,提问作者Amila Fonseka
相关产品推荐
相关产品推荐

