按 Y 值对生物的 ArrayList 进行排序

Sorting an ArrayList of mobs by their Y value

我有一个游戏,其中有 ArrayList 个怪物。每个生物都有一个位置,我想按它们的 Y 值对它们进行排序,以便最后呈现最低的生物。

我是 运行 LibGDX 所以数值范围从 -300(底部)到 300(顶部)。

这是当前设置:

Collections.sort(entities, new Comparator<Entity>() {
    @Override
    public int compare(Entity e1, Entity e2) {
        return String.valueOf(e1.position.y)
                     .compareTo(String.valueOf(e2.position.y));
    }

});

System.out.println("------------------------");
for (Entity e : entities) {
    System.out.println(entities.indexOf(e) + ": " + e.entityID);
    if (e != null) {
        e.draw(sb);
    }
}
String.valueOf(e1.position.y).compareTo(String.valueOf(e2.position.y))

会将 e1.positione2.positiony 值转换为字符串,然后字符串中的 compareTo 使用字母顺序。

如果 y 是类似于 int 的数值,并且您想使用数字顺序对其进行排序,您应该使用

Integer.compare(e1.position.y, e2.position.y)

BTW 具有 public 字段是违反封装的不良做法。您应该将它们设为私有并添加 getters and setters

此外,自 Java 8 以来,我们可以让我们的生活更轻松,并使用像

这样的 lambda 来创建比较器
Comparator.comparingInt((Entity e) -> e.position.y)

Comparator.<Entity>comparingInt(en -> en.position.y);