ما هو استخدام طريقة المقارنة أكثر فهمًا؟
سؤال
أريد فرز الكائنات بناءً على القيم المنطقية وأريد فرز القيم الحقيقية قبل القيم الخاطئة.
أي من هذه التطبيقات من المقارنة أكثر قابلية للقراءة؟
باستخدام -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();
لا تنتمي إلى StackOverflow