如何根据实体的Y值对ArrayList进行排序?

时间:2019-06-17 11:05:25

标签: java sorting arraylist libgdx

我正在制作一个游戏,可以单击按钮生成士兵。所有这些士兵将被添加到名为entity_walking_right_array的ArrayList中。我还有一个ArrayList用于向左走的实体。

我还有另一个类,用于确定或绘制士兵的x,y位置,动画等。所有士兵的Y值都在屏幕高度和450像素之间。

当我生成士兵时,其中某些士兵在逻辑上将比其他士兵具有更高的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)'。

2 个答案:

答案 0 :(得分:0)

它只是说“无法解析方法'compareTo(float)'。 您需要使用compare方法而不是compareTo方法,并将要比较的两个对象作为参数传递。 https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

Collections.sort(entity_walking_right_array,                             (o1,o2)-> compare(o1.getY(),o2.getY()));

答案 1 :(得分:0)

比较原始类型时,不能像链接的问题中那样使用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