It seems I have misunderstood something about "comparable" - I thought I could override the Arrays.sort() by making a compareTo(Person person) method - what exactly am I missing?
I thought the Arrays.sort would take my Person[] and sort it using my compareTo(Person person) method?
If I am completely off track - could someone nudge me in the right direction..?
import java.util.*;
public class Person implements Comparable<Person>{
protected String surname;
protected String givenName;
//Constructor for my "Person" objects
protected Person(String aSurname, String aGivenName){
surname=aSurname;
givenName=aGivenName;
}
public static void main(String[] args){
//A string of Person objects
Person[] arrayOfPersons=new Person[6];
arrayOfPersons[0]=new Person("Kangasniemi","Jerri");
arrayOfPersons[1]=new Person("Kangasniemi","Jukka");
arrayOfPersons[2]=new Person("Kangasniemi","Jessicka");
arrayOfPersons[3]=new Person("Kangasniemi","Johan");
arrayOfPersons[4]=new Person("Kangasniemi","Joakim");
arrayOfPersons[5]=new Person("Virtamo","Nina");
Arrays.sort(arrayOfPersons);
for (int i = 0; i < arrayOfPersons.length; i++) {
System.out.println(arrayOfPersons[i].toString());
}
}
@Override
public String toString(){
return givenName+" "+surname;
}
@Override
public int compareTo(Person person) {
String personOne="";
String personTwo="";
personOne=this.toString();
String[] personOneString=personOne.split(" ");
personTwo=person.toString();
String[] personTwoString=personTwo.split(" ");
if (personOneString[1]==personTwoString[1]) {
if (personOneString[0]==personTwoString[0]) {
return 0;
} else if(personOneString[0].compareToIgnoreCase(personTwoString[0])<0){
return -1;
} else{
return 1;
}
}else if(personOneString[1].compareToIgnoreCase(personTwoString[1])<0){
return -1;
}else{
return 1;
}
}
}
@Override
public int compareTo(Person person) {
int rv = this.givenName.compareToIgnoreCase(person.givenName);
if (rv != 0) return rv;
else return this.surname.compareToIgnoreCase(person.surname);
}
Try something like this:
public class Person implements Comparable<Person>{
protected String surname;
protected String givenName;
//Constructor for my "Person" objects
protected Person(String aSurname, String aGivenName){
surname=aSurname;
givenName=aGivenName;
}
public String getSurname() {
return surname;
}
public String getGivenName() {
return givenName;
}
public static void main(String[] args) {
Person[] arrayOfPersons=new Person[6];
arrayOfPersons[0]=new Person("Kangasniemi","Jerri");
arrayOfPersons[1]=new Person("Kangasniemi","Jukka");
arrayOfPersons[2]=new Person("Kangasniemi","Jessicka");
arrayOfPersons[3]=new Person("Kangasniemi","Johan");
arrayOfPersons[4]=new Person("Kangasniemi","Joakim");
arrayOfPersons[5]=new Person("Virtamo","Nina");
Arrays.sort(arrayOfPersons);
for (int i = 0; i < arrayOfPersons.length; i++) {
System.out.println(arrayOfPersons[i].toString());
}
}
@Override
public String toString(){
return givenName+" "+surname;
}
@Override
public int compareTo(Person person) {
int surnameComparison = this.surname.compareToIgnoreCase(person.getSurname());
if(surnameComparison == 0){
return this.givenName.compareToIgnoreCase(person.getGivenName());
}
return surnameComparison;
}
But remember that in the compareTo methods this.surname , this.givenName , person , person.getSurename() and person.getGivenName() cannot be (or returns) null!
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.