按 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.position
和 e2.position
的 y
值转换为字符串,然后字符串中的 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);
我有一个游戏,其中有 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.position
和 e2.position
的 y
值转换为字符串,然后字符串中的 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);