空体while循环优化咨询:如何优雅调用布尔方法至返回false
问题描述
我编写了一行调用返回布尔值方法的代码,希望持续调用该方法直到它返回false。为此我使用了一个while循环,但由于所有操作都在作为循环条件的方法内完成,循环无需内容体,代码如下:
while (grid.sandGoesDown(500, 0)) { }
请问是否有更优雅的实现方式?我设想类似repeatUntil(method, condition)这样的形式。
实现方案
- 封装通用工具方法:完全贴合你想要的
repeatUntil形式,自己写一个工具方法复用:
// 通用重复执行工具,直到传入的方法返回false public static void repeatUntil(Supplier<Boolean> action) { while (action.get()) { // 空体,业务逻辑已在action中实现 } }
调用时直接用Lambda表达式传入目标方法:
repeatUntil(() -> grid.sandGoesDown(500, 0));
这种方式复用性拉满,后续其他类似场景直接调用即可。
- 优化原循环的可读性:如果不想额外写工具类,给空循环体加个清晰的注释,让代码意图一目了然:
// 持续调用sandGoesDown,直到方法返回false while (grid.sandGoesDown(500, 0)) { // 无额外逻辑,所有操作已在循环条件的方法内完成 }
这种方式零额外代码,只是可读性比工具方法稍弱。
- do-while变种(谨慎使用):如果业务允许先执行一次方法再判断,可以用do-while,但注意这和原while的执行逻辑(先判断再执行)有差异,仅适用于不需要首次判断的场景:
do { // 逻辑已在方法内完成 } while (grid.sandGoesDown(500, 0));
内容的提问来源于stack exchange,提问作者Quentin M
相关产品推荐
相关产品推荐

