如何按 Y 值对实体的 ArrayList 进行排序?
How do you sort an ArrayList of entities by their Y-value?
我正在制作一款可以通过单击按钮生成士兵的游戏。所有这些士兵都将添加到名为 entity_walking_right_array
的 ArrayList 中。我还有另一个 ArrayList 用于向左行走的实体。
我有另一个 class 确定或绘制士兵的 x、y 位置、动画等。所有士兵在屏幕高度和 450 像素之间有一个随机的 Y 值。
当我生成士兵时,其中一些士兵在逻辑上会比其他士兵具有更高的 y 值或 y 位置,但是当这些士兵稍后创建时,与具有较低 y 值的士兵相比,它们将被渲染在它们之上。这导致士兵在逻辑上应该在他们身后时被渲染在士兵之上。 (例如脚在y值较低的士兵的脸上)
然后我这样渲染士兵:
for (entity_walking_right blue : entity_walking_right_array) {
blue.render(game.batch);
}
我发现当我使用这些士兵的 y 值(entity_walking_right.getY();
是一个浮点数)对 ArrayList 进行排序时,它们应该以正确的顺序呈现。至少我希望这是正确的方法。
我已经尝试使用 entity_walking_right_array,sort(...)
、Collections.sort
或其中一些对我来说是全新的 Lambda
函数。我也尝试过使用 compareTo
(不幸的是我再也找不到问题了)但是它给了我一个错误,基本上说 compareTo
只是作为一个函数不存在。
我发现的任何代码都没有真正帮助我,我正在努力解决这个问题 2 天,这就是我写这个问题的原因。
编辑:
我找到问题了。
Sort ArrayList of custom Objects by property
当我尝试使用
Collections.sort(entity_walking_right_array,
(o1, o2) -> o1.getY().compareTo(o2.getY()));
它只是说“无法解析方法 'compareTo(float)'。
它只是说“无法解析方法 'compareTo(float)'。
您需要使用方法 compare 而不是 compareTo 并将要比较的两个对象作为参数传递。
https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html
Collections.sort(entity_walking_right_array,
(o1, o2) -> 比较(o1.getY(), o2.getY()));
比较原始类型时,您不能像链接问题中那样使用 compareTo,因此您需要编写自己的或使用预定义的
entity_walking_right_array.sort(Comparator.comparingDouble(entity_walking_right::getY));
或
entity_walking_right_array.sort(Comparator.comparingDouble(entity_walking_right::getY).reversed());
取决于排序顺序。
并请使用java标准命名,entity_walking_right -> entityWalkingRight
我正在制作一款可以通过单击按钮生成士兵的游戏。所有这些士兵都将添加到名为 entity_walking_right_array
的 ArrayList 中。我还有另一个 ArrayList 用于向左行走的实体。
我有另一个 class 确定或绘制士兵的 x、y 位置、动画等。所有士兵在屏幕高度和 450 像素之间有一个随机的 Y 值。
当我生成士兵时,其中一些士兵在逻辑上会比其他士兵具有更高的 y 值或 y 位置,但是当这些士兵稍后创建时,与具有较低 y 值的士兵相比,它们将被渲染在它们之上。这导致士兵在逻辑上应该在他们身后时被渲染在士兵之上。 (例如脚在y值较低的士兵的脸上)
然后我这样渲染士兵:
for (entity_walking_right blue : entity_walking_right_array) {
blue.render(game.batch);
}
我发现当我使用这些士兵的 y 值(entity_walking_right.getY();
是一个浮点数)对 ArrayList 进行排序时,它们应该以正确的顺序呈现。至少我希望这是正确的方法。
我已经尝试使用 entity_walking_right_array,sort(...)
、Collections.sort
或其中一些对我来说是全新的 Lambda
函数。我也尝试过使用 compareTo
(不幸的是我再也找不到问题了)但是它给了我一个错误,基本上说 compareTo
只是作为一个函数不存在。
我发现的任何代码都没有真正帮助我,我正在努力解决这个问题 2 天,这就是我写这个问题的原因。
编辑:
我找到问题了。
Sort ArrayList of custom Objects by property
当我尝试使用
Collections.sort(entity_walking_right_array,
(o1, o2) -> o1.getY().compareTo(o2.getY()));
它只是说“无法解析方法 'compareTo(float)'。
它只是说“无法解析方法 'compareTo(float)'。 您需要使用方法 compare 而不是 compareTo 并将要比较的两个对象作为参数传递。 https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html
Collections.sort(entity_walking_right_array, (o1, o2) -> 比较(o1.getY(), o2.getY()));
比较原始类型时,您不能像链接问题中那样使用 compareTo,因此您需要编写自己的或使用预定义的
entity_walking_right_array.sort(Comparator.comparingDouble(entity_walking_right::getY));
或
entity_walking_right_array.sort(Comparator.comparingDouble(entity_walking_right::getY).reversed());
取决于排序顺序。
并请使用java标准命名,entity_walking_right -> entityWalkingRight