【问题标题】:Sort an array of objects alphabetically [duplicate]按字母顺序对对象数组进行排序[重复]
【发布时间】:2013-11-02 20:57:30
【问题描述】:

我有一个对象数组,每个对象都有一个给定的名字和姓氏。 使用方法 getGivenName 和 getSurname 将这些名称写入对象。

我需要按姓氏的字母顺序对数组中的元素进行排序。 我该怎么做?

【问题讨论】:

  • 通过使用**********。在你告诉我你试过什么之前我不会告诉你的吗? :)
  • 不,我不知道我是 Java 新手,这就是我问的原因
  • 查看 Java.util.Arrays。有一个带有你名字的例程。
  • 谷歌搜索“java排序数组”可能会有所帮助。

标签: java arrays sorting


【解决方案1】:

你的比较器

class SampleComparator implements Comparator<YourObject> {
    @Override
    public int compare(YourObject o1, YourObject o2) {

           return o1.getSurname().compareTo(o2.getSurname());
   }
}

你的排序

  Collections.sort(YourList, new SampleComparator())

如果您需要忽略大小写,请使用 like

  return o1.getSurname().compareToIgnoreCase(o2.getSurname()); 

【讨论】:

  • 我在数组中有 1000 个对象,有什么方法可以提高效率吗?
  • 是什么让你认为这没有效率?
  • 请注意,String.compareTo 将根据字符串中每个字符的 Unicode 值比较字符串,这可能不是您想要/期望的,具体取决于您的输入字符串和语言环境。看我的回答。
【解决方案2】:

使用List 而不是使用数组。你的班级需要implements Comparable interface。 请看代码,

通过实现 Comparable 接口

public class Person implements Comparable<Person>{

private String givenName;
private String surname;

public static void main(String[] args) {
    Person person1 = new Person("a","b");
    Person person2 = new Person("c","d");
    Person person3 = new Person("e","f");

    List<Person> personList = new ArrayList<Person>();
    personList.add(person1);
    personList.add(person2);
    personList.add(person3);
    Collections.sort(personList);
    System.out.println(personList);
}

@Override
public String toString() {
    return "WorkSheet [givenName=" + givenName + ", surname=" + surname
            + "]";
}
    public Person() {
        // TODO Auto-generated constructor stub
    }


public Person(String givenName , String surname) {
    this.givenName = givenName;
    this.surname = surname;
}

public String getGivenName() {
    return givenName;
}

public void setGivenName(String givenName) {
    this.givenName = givenName;
}

public String getSurname() {
    return surname;
}

public void setSurname(String surname) {
    this.surname = surname;
}

@Override
public int compareTo(Person o) {
    // TODO Auto-generated method stub
    return o.getSurname().compareTo(this.getSurname());
}
}   

通过实现比较器接口

public class Person implements Comparator<Person>{

private String givenName;
private String surname;

public static void main(String[] args) {
    Person person1 = new Person("a","b");
    Person person2 = new Person("c","d");
    Person person3 = new Person("e","f");

    List<Person> personList = new ArrayList<Person>();
    personList.add(person1);
    personList.add(person2);
    personList.add(person3);
    Collections.sort(personList , new Person());
    System.out.println(personList);
}

@Override
public String toString() {
    return "WorkSheet [givenName=" + givenName + ", surname=" + surname
            + "]";
}

public Person() {
    // TODO Auto-generated constructor stub
}

public Person(String givenName , String surname) {
    this.givenName = givenName;
    this.surname = surname;
}

public String getGivenName() {
    return givenName;
}

public void setGivenName(String givenName) {
    this.givenName = givenName;
}

public String getSurname() {
    return surname;
}

public void setSurname(String surname) {
    this.surname = surname;
}

@Override
public int compare(Person o1, Person o2) {
    // TODO Auto-generated method stub
    return o2.getSurname().compareTo(o1.getSurname());
}
}

【讨论】:

    【解决方案3】:

    在对自然语言文本进行排序时,建议使用CollatorCollationKeys。其他答案提到的 String.compareTo 方法将根据字符串中每个字符的 Unicode 值比较字符串,这可能不是您想要/期望的,具体取决于您的输入字符串和语言环境。

    请注意,我写了some utility methods 来帮助对自然语言文本进行排序。

    例如你可以试试这样的:

    public class PersonLocalizer implements Localizer<Person> {
        @Override
        public String getDisplayString(Person person, Locale inLocale) {
            return person.getSurname();
        }
    } 
    
    [...]
    
    Localizables.sort(new PersonLocalizer (), persons);
    

    马文:

    <dependency>  
        <groupId>org.softsmithy.lib</groupId>  
        <artifactId>softsmithy-lib-core</artifactId>  
        <version>0.3</version>  
    </dependency>  
    

    【讨论】:

      猜你喜欢
      • 2019-06-15
      • 2021-04-23
      • 2014-12-30
      • 2014-05-14
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多