ما هو استخدام طريقة المقارنة أكثر فهمًا؟

StackOverflow https://stackoverflow.com/questions/3084115

  •  28-09-2019
  •  | 
  •  

سؤال

أريد فرز الكائنات بناءً على القيم المنطقية وأريد فرز القيم الحقيقية قبل القيم الخاطئة.

أي من هذه التطبيقات من المقارنة أكثر قابلية للقراءة؟

باستخدام -1 لتغيير السلوك الافتراضي

public class Example implements Comparable<Example>{

  Boolean isOk;

  public int compareTo(Example o) {
      return -1 * this.isOk.compareTo(o.isOk);
  }

}

أو مبادلة جوانب طريقة المقارنة المنطقية؟

public class ExampleTwo implements Comparable<ExampleTwo>{

  Boolean isOk;

  public int compareTo(ExampleTwo o) {
      return o.isOk.compareTo(this.isOk);
  }

}
هل كانت مفيدة؟

المحلول

النموذج الأول هو ببساطة خاطئ - ظلم - يظلم - لأنه إذا compareTo عائدات Integer.MIN_VALUE, ، سيحاول إلغاء ذلك - ويؤدي إلى ذلك Integer.MIN_VALUE تكرارا.

أسهل طريقة لإصلاح ذلك فقط لاستخدام الرمز من المقتطف الثاني.

من ناحية أخرى:

  • كلاهما يمكن أن يفشل إذا isOk باطل
  • إذا كنت تستخدم حقًا فقط ، فقد يكون جدول الحقيقة البسيط أكثر بساطة
  • إنه المستطاع الذي - التي Boolean.compareTo لن يعود أبدًا Integer.MIN_VALUE. لن أعتمد على ذلك.

نصائح أخرى

سأستخدم Ordering صف دراسي من الجوافة (سابقا مجموعات جوجل) ، ينفذ Comparator, ، لذلك يمكن استخدامه كبديل للانخفاض:

Ordering<Object> reverseOrdering = Ordering.natural().reverse();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top