Java中用循环简化多对象相交判断代码的方案求助
简化重复判断的循环方案
嘿,我太懂你对着一堆重复if判断头疼的感觉了——硬编码索引不仅看着冗余,后续维护起来也麻烦,哪天vlna里的元素变多了,还得手动加新的判断语句。咱们直接用循环把这堆重复逻辑给干掉:
优化核心思路
- 缓存重复计算的值:先把
hrac.getBoundsInParent()的结果存起来,避免每次判断都重复调用方法,既能提升性能,也让代码更简洁。 - 遍历集合替代硬编码索引:不管vlna里有多少元素,用循环遍历所有项,彻底告别逐个写if的繁琐。
具体代码实现
方案1:增强for循环(最简洁,优先推荐)
如果vlna是List或者其他可迭代集合,直接用foreach遍历就行:
// 先缓存hrac的边界,减少重复方法调用 Bounds hracBounds = hrac.getBoundsInParent(); // 遍历vlna中的每一个元素 for (var vlnaElement : vlna) { if (hracBounds.intersects(vlnaElement.getBoundsInParent())) { vymaz(); // 要是只要找到第一个相交项就执行vymaz并停止循环,就加上这行 // break; } }
方案2:普通for循环(适合需要索引的场景)
如果你需要用到索引,或者vlna是数组类型,就用传统for循环:
Bounds hracBounds = hrac.getBoundsInParent(); int vlnaCount = vlna.size(); // 数组的话改成vlna.length for (int i = 0; i < vlnaCount; i++) { if (hracBounds.intersects(vlna.get(i).getBoundsInParent())) { vymaz(); // 需要提前终止循环就加break // break; } }
额外小提示
- 如果执行
vymaz()之后不需要再检查剩下的元素,一定要加上break,避免做无用的循环迭代。 - 改成循环后,不管vlna里的元素数量怎么变化,代码都能自动适配,再也不用手动加新的if判断啦。
内容的提问来源于stack exchange,提问作者Filip Dávidík
相关产品推荐
相关产品推荐

