Sort an ArrayList of Objects by last name, then first name

I have an arrayList of different types of players based on sports. I need to sort the list of players in the arrayList by last name to start. If 2 players have the same last name it needs to then sort those 2 players by the first name. example: Format Lastname firstname

Williams Robert
Phillips Warren
Doe John
Phillips Mark

Output should be

Doe John
Phillips Mark
Phillips Warren
Williams Robert

What I have now only sorts by either the first or last. I have it by last atm in my code.

public static void sortPlayers(ArrayList playerList) {
    for (int i = 0; i < playerList.size(); i++) {
        for (int j = 0; j < playerList.size(); j++) {
            Collections.sort(playerList, new Comparator() {

                public int compare(Object o1, Object o2) {
                    PlayerStats p1 = (PlayerStats) o1;
                    PlayerStats p2 = (PlayerStats) o2;
                    return p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName());
                }
            });
        }

    }
}

Change the comparator to:

public int compare(Object o1, Object o2) {
    PlayerStats p1 = (PlayerStats) o1;
    PlayerStats p2 = (PlayerStats) o2;
    int res =  p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName());
    if (res != 0)
        return res;
    return p1.getPlayerFirstName().compareToIgnoreCase(p2.getPlayerFirstName())
}

Petar's answer is correct, just two remarks:

  • Use List instead of ArrayList as method argument, as the interface is more general, and the method will work even if you change to another List type (like LinkedList... ) later
  • Use generics to make your code more type safe.

An improved version:

//the place where you define the List
List<PlayerStats> playerList = new ArrayList<PlayerStats>();


public static void sortPlayers(List<PlayerStats> playerList) {
   Collections.sort(playerList, new Comparator<PlayerStats>() {
       public int compare(PlayerStats p1, PlayerStats p2) {
            int res =  p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName());
            if (res != 0)
                return res;
            return p1.getPlayerFirstName().compareToIgnoreCase(p2.getPlayerFirstName())
       }
   });
}