Java的:使用Collat​​orKey排序集合(Java: Sort a Collection

2019-08-06 04:17发布

我想实现的是一个字符串值进行排序对象的总汇。 然而,在使用的整理语言环境相关的方式。 由于性能原因,我不想(代码如下)使用分页器比较()方法,而Collat​​ionKey类,作为Java API状态的使用Collat​​ionKey的要快得多。

但我怎么实现使用Collat​​ionKey的的的compareTo()方法? 据我的理解,我有,如果我将使用Collat​​ionKey的完全写我自己的所有的比较方法。 所以,我必不再能够使用Collections.sort()方法...我是因为这是很容易理解的例子,一个最有效的实现非常心存感激,以使用Collat​​ionKey的公司负责人集合对象进行排序。

谢谢!

public class Person implements Comparable<Person> {

String lastname;

public int compareTo(Person person) {
     //This works but it is not the best implementation for a good performance
     Collator instance = Collator.getInstance(Locale.ITALY);
     return instance.compare(lastname, person.lastname);
}
}

...
ArrayList list = new ArrayList();
Person person1 = new Person("foo");
list.add(person1);
Person person2 = new Person("bar");
list.add(person2);
Collections.sort(list);
...

Answer 1:

class Person implements Comparable<Person> {

  private static final Collator collator = Collator.getInstance(Locale.ITALY);

  private final String lastname;

  private final CollationKey key;

  Person(String lastname) {
    this.lastname = lastname;
    this.key = collator.getCollationKey(lastname);
  }

  public int compareTo(Person person) {
     return key.compareTo(person.key);
  }

}


Answer 2:

  1. 创建一个SortedMap m,其中T是你想用排序的对象的类型CollationKeys 。 您可以使用TreeMap作为实现
  2. 对于每一个E元素要排序, m.put(collator.getCollationKey(e.{getStringYouWantToSortOn}), e);

遍历m.values()应该产生你的对象,通过你想使用字符串排序CollationKeys

我相信这是效率不高,但它应该工作。



Answer 3:

用一个比较,而不是把人可比。 你比较可以采取2个Persion实例和基于一些校书郎实例进行比较。 然后调用

Collections.sort(list, myPersonComparator);


文章来源: Java: Sort a Collection using a CollatorKey