Стабильная сортировка java по алфавиту с массивами

Я пытался запустить сортировку в первый раз. Я создал массив, который имеет студенческие объекты. Теперь я хочу отсортировать эти объекты в этом массиве в соответствии с их именем в алфавитном порядке. Что я не понимаю, так это Arrays.sort (студент, новые студенты ()); и какие должны быть его аргументы, если таковые имеются. Большое спасибо!

import java.util.Comparator;
import java.util.Arrays;

public class Students implements Comparable<Students> {
private String FirstName;
private String lastName;
private int age;


public Students(String firstName, String lastName, int age) {
    super();
    FirstName = firstName;
    this.lastName = lastName;
    this.age = age;
}


public String getFirstName() {
    return FirstName;
}


public void setFirstName(String firstName) {
    FirstName = firstName;
}


public String getLastName() {
    return lastName;
}


public void setLastName(String lastName) {
    this.lastName = lastName;
}


public int getAge() {
    return age;
}


public void setAge(int age) {
    this.age = age;
}
@Override
public int compareTo(Students toCheck) {
    int compareQuantity = ((Students)toCheck).getAge();

    return this.age-compareQuantity;
}



public static void main(String args[]){
    //array for the 6 students 
    Students[] student= new Students[6] ;
    //creating and adding one by one
    Students sam = new Students("Sam","Wo", 22 );
    student[0]=sam;
    Students ben = new Students("Ben","Wang", 27 );
    student[1]=ben;
    Students arsalan = new Students("Arsalan","Khan", 28);
    student[2]=arsalan;
    Students issa = new Students("Issa","Hashim", 25 );
    student[3]=issa;
    //ben khan will test if the last name is different. Should be fun .
    Students benK = new Students("Ben","Khan", 29 );
    student[4]=benK;
    Students jackM = new Students("Jack","Meth", 23);
    student[5]=jackM;

    Comparator <Students> studentCompare = new Comparator<Students>(){

    public int compare (Students s1 , Students s2){
        String studentName1 = s1.getFirstName();
        String studentName2 = s2.getFirstName();
        return studentName1.compareTo(studentName2);

        Arrays.sort(student,new Students());

    }

}; для (int i =0; i

3 ответа

Решение

Вам не нужен Comparator внутри вашей функции main(), поэтому вы должны изменить функцию main(), как показано ниже:

    public static void main(String args[]) {
    //array for the 6 students
    Students[] student = new Students[6];
    //creating and adding one by one
    Students sam = new Students("Sam", "Wo", 22);
    student[0] = sam;
    Students ben = new Students("Ben", "Wang", 27);
    student[1] = ben;
    Students arsalan = new Students("Arsalan", "Khan", 28);
    student[2] = arsalan;
    Students issa = new Students("Issa", "Hashim", 25);
    student[3] = issa;
    //ben khan will test if the last name is different. Should be fun .
    Students benK = new Students("Ben", "Khan", 29);
    student[4] = benK;
    Students jackM = new Students("Jack", "Meth", 23);
    student[5] = jackM;

    Arrays.sort(student);

}

Вам не нужно реализовывать Comparable интерфейс. Попробуй это.

Arrays.sort(student, new Comparator<Students>() {
      @Override
    public int compare(Students o1, Students o2) {
        // TODO Auto-generated method stub
        return o1.FirstName.compareTo(o2.FirstName);
    }
});

Вывод отсортирован по алфавиту:

28 Arsalan
27 Ben
29 Ben
25 Issa
23 Jack
22 Sam

Начиная с Java 8, Comparators стали намного красивее...

// NOTE: I would rename your student array variable to be students
//       and your class declaration to be Student. 
Arrays.sort(student, Comparator.comparing(Students::getFirstName));
Другие вопросы по тегам