繁体   English   中英

通过重写Arrays.sort()对对象数组进行排序

[英]sorting array of objects by overriding Arrays.sort()

似乎我误解了“可比较”的东西 - 我以为我可以通过制作compareTo(Person person)方法来覆盖Arrays.sort() - 我到底错过了什么?

我认为Arrays.sort会使用我的Person []并使用我的compareTo(Person person)方法对其进行排序?

如果我完全偏离轨道 - 有人可能会朝着正确的方向推动我......?

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);
}

尝试这样的事情:

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;
}

但请记住,在compareTo方法中, this.surnamethis.givenNamepersonperson.getSurename()person.getGivenName()不能为(或返回)null!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM