I aim to sort an arraylist of a class
public class AnimSprite
{
float x,y,z;
//...//
}
ArrayList<AnimSprite> listofsprites = new ArrayList<AnimSprite>();
//...//
list.add( new AnimSprite(1f,10f,0f) ); //x,y,z
list.add( new AnimSprite(15f,25f,1f) );
list.add( new AnimSprite(30f,-62f,0f) );
list.add( new AnimSprite(150f,-62f,2f) );
list.add( new AnimSprite(55f,-65f,0f) );
//...//
Then of course I loop to draw it
for (AnimSprite s: listofsprites) { s.draw();}
Before draw instruction, how could we sort the array list ? (ordered by y ascending and then z ascending)
Eg expected result:
obj0 -> AnimSprite(55f,-65f,0f)
obj1 -> AnimSprite(30f,-62f,0f)
obj2 -> AnimSprite(1f,10f,0f)
obj3 -> AnimSprite(15f,25f,1f)
obj4 -> AnimSprite(150f,-62f,2f)
for the moment, as below, I sort ascending by y and z but I am not sure it is state of art?
public static class AnimSprite implements Comparable<AnimSprite >
{
//...//
Override
public int compareTo(AnimSprite o)
{
float result = this.z - o.z;
if (result == 0f) result = this.y - o.y;
return ((int)(result));
}
Comparatorinterface: docs.oracle.com/javase/7/docs/api/java/util/Comparator.html. If you still have a hard time, pls reply and we can work through it.Collection.sort(list)