Sort a list that contains a custom class
arraylist, class, java, list, sorting
Solution
You can use the `public static <T> void sort(List<T> list, Comparator<? super T> c)` overload in `Collections` - provide the comparator you need (can be just an anonymous class) - and you are all set!
EDIT: This describes how the method works. In brief, you'll implement your call as
Collections.sort(list, new Comparator<Player>() {
int compare(Player left, Player right) {
return left.getPoints() - right.getPoints(); // The order depends on the direction of sorting.
}
});
That's it!
Problem
so I'm currently doing an exercise for college that has several optional parts (because we havn't done this in class yet), one of them being to use lists instead of arrays (so it'd be variable size) and another one printing the list sorted by points (I'll get to that now) So, I have the Player.java class which looks like this. ``` public class Player { String name; String password; int chips; int points; public Player(String n, String pw, int c, int p) { name = n; password = pw; chips = c; points = p; } public String getName() { return name; } public void setName(String n) { name = n; } public void setPW(String pw) { password = pw; } public String getPW() { return password; } public void setChips(int c) { chips = c; } public int getChips() { return chips; } public void setPoints(int p) { points = p; } public int getPoints() { return points; } } ``` Pretty simple, then I'm creating a List with this (in another class): ``` List<Player> lplayer = new ArrayList<Player>(); ``` Adding players with this: ``` lplayer.add(new Player(n,pw,c,p))` ``` And finally reading their stats with this: ``` public int search_Player (String n) { String name; int i = 0; boolean found = false; while ((i <= tp) && (!found)) { name = lplayer.get(i).getName(); if (name.equals(n)) { found = true; } i++; } return (found == true) ? i-1 : -1; } public Player show_Player (int i) { return lplayer.get(i); } public void list_Players() { Collections.sort(lplayer); int i2; if (tp > 0) { // variable which contains number of total players for (int i = 0;i<tp;i++) { i2 = i+1; System.out.println ("\n"+i2+". "+lplayer.get(i).getName()+" [CHIPS: "+lplayer.get(i).getChips()+" - POINTS: "+lplayer.get(i).getPoints()+"]"); } } else { System.out.println ("There are no players yet."); } } ``` So that's basically all the code. As you can see the I already have a list_Players function but that just prints it in the order it was added. I need a way to print in sorted by the points each player has (so basically a ranking). As you can see I'm pretty new to java so please try not to come up with a very complicated way of doing it. I've already searched for it and found things like Collections.sort(list) but I guess that's not what I need right here. Thank you!