【问题标题】:Java - How to check whole array for intersectionJava - 如何检查整个数组的交集
【发布时间】:2017-09-30 11:11:17
【问题描述】:

我不知道如何真正提出这个问题,所以我只是创建了一个新线程。我正在尝试查看是否可以立即检查我的球是否与数组中的任何矩形相交。

if(ball.getBounds2D().intersects(bricksEasy)) <-- bricks easy is a 2D array of rectangles

现在我正在避免只遍历整个数组以避免延迟。我可以使用任何解决方案吗?欣赏它。

【问题讨论】:

  • “我正在避免遍历整个数组以避免延迟。” - 这种推理毫无意义。您或某些现有代码需要迭代,正如您已经发现的那样,没有这样的现有代码。所以只有 you 可以迭代该数组。

标签: java arrays swing


【解决方案1】:

现在我避免只遍历整个数组以避免 延迟。我可以使用任何解决方案吗?

一旦检测到碰撞就停止迭代不会造成任何延迟。

如果你操作一个Rectangle2D 实例,你可以使用这个重载的实例方法:

public boolean intersects(Rectangle2D r)

要在匹配完成后立即退出迭代,您可以使用 anyMatch() 谓词:

Rectangle2D ball2D = ...;
Rectangle2D[] bricksEasy = ...;
boolean isAnyIntersection = Arrays.stream(bricksEasy).anyMatch(brick -> brick.intersects(ball2D));

您也可以使用以ball2D 变量为目标的方法引用来实现:

Rectangle2D ball2D = ...;
Rectangle2D[] bricksEasy = ...;
boolean isAnyIntersection = Arrays.stream(bricksEasy).anyMatch(ball2D::intersects);

【讨论】:

  • 这是 Java 8 的一部分吗?
  • @Daniel Yoon 确实如此。
  • 是的,除了 lambda 表达式,我不太习惯 Java 8 的特性:/
  • 我明白了。但我认为你现在应该开始习惯了。 Java 8 并不年轻。从流和谓词等基础开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多