سؤال

ما أود تحقيقه هو فرز مجموعة من الكائنات حسب قيمة السلسلة.ولكن بطريقة تعتمد على اللغة باستخدام المترجم.لأسباب تتعلق بالأداء، لا أرغب في استخدام طريقة Collator Compare() (كما هو موضح أدناه في الكود) بدلاً من فئة CollationKey، حيث تنص واجهة برمجة تطبيقات Java على أن استخدام CollationKey أسرع بكثير.

ولكن كيف يمكنني تنفيذ طريقة CompareTo() باستخدام CollationKey؟بقدر ما فهمت، يجب أن أكتب جميع طرق المقارنة بنفسي إذا كنت سأستخدم CollationKey.لذلك لن أتمكن بعد الآن من استخدام طرق Collections.sort()...أنا ممتن جدًا للمثال الذي يسهل فهمه والتنفيذ الأكثر كفاءة لفرز مجموعة كائنات الأشخاص باستخدام CollationKey.

شكرًا لك!

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);
...
هل كانت مفيدة؟

المحلول

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

}

نصائح أخرى

  1. قم بإنشاء SortedMap m، حيث T هو نوع الكائنات التي تريد الفرز باستخدامها CollationKeys.يمكنك استخدام TreeMap كالتنفيذ
  2. لكل عنصر إلكتروني تريد فرزه، m.put(collator.getCollationKey(e.{getStringYouWantToSortOn}), e);

التكرار أكثر m.values() يجب أن تسفر عن الكائنات الخاصة بك، مرتبة حسب السلسلة التي تريد استخدامها CollationKeys.

أعتقد أن هذا ليس فعالاً، لكن يجب أن ينجح.

واستخدام المقارنة بدلا من جعل الشخص قابلة للمقارنة. المقارنة الخاصة بك يمكن أن تتخذ 2 الحالات الشخصية ومقارنتها على أساس بعض المثال Collator. ثم استدعاء

Collections.sort(list, myPersonComparator);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top