مقدمة
الإنترفيس Comparator
مصمم لمقارنة قيم الكائنات.
يعتمد عليه كل إنترفيس يقوم بترتيب الكائنات التي يتم إدخلها فيه, سواء كان ترتيباً حسب القيمة أو ترتيباً أبجدياً.
فمثلاً، عند إنشاء كائن من الكلاس TreeSet
نجد العناصر فيه تم ترتيبها بشكل تصاعدي حسب قيمهم في حال كانت عناصره عبارة عن أرقام، أو ترتيباً أبجدياً في حال كانت عناصره تمثل نصوص.
مثال شامل
في المثال التالي قمنا بإنشاء كلاس إسمه NumbersComparator
يفعل implements
للإنترفيس Comparator
.
إذاً على الكلاس NumbersComparator
أن يفعل Override للدالة compare()
حتى تقارن الأرقام بالطريقة التي نريد.
الدالة compare()
عندها باراميترين من النوع Object
. يجب جعلها تقارن أي كائنين نمررهما لها بالطريقة التي نريد.
سنجعلها تقارن أي رقمين كالتالي:
- ترجع
0
في حال كانا متساوييان.
- ترجع
1
في حال كانت قيمة الكائن num1
أكبر من قيمة الكائن num2
.
- ترجع
-1
في حال كانت قيمة الكائن num1
أصغر من قيمة الكائن num2
.
في الأخير قمنا بإنشاء كلاس إسمه Main
لتجربة الدالة compare()
فيه.
IntegersComparator.java
// Comparator هنا قمنا باستدعاء الإنترفيس
import java.util.Comparator;
// Integer و حددنا أنه سيتعامل مع كائنات نوعها implements هنا فعلنا له
public class IntegersComparator implements Comparator<Integer> {
// لنحدد ماذا ستفعل عند استدعائها compare() للدالة Override هنا فعلنا
@Override
public int compare(Integer num1, Integer num2) {
// سيتم إرجاع القيمة 0 num2 أو الكائن num1 مكان الكائن null إذا تم إدخال
if( num1 == null || num2 == null ) {
return 0;
}
// سترجع 0 إلى مكان الإستدعاء num2 تساوي قيمة num1 في حال كانت قيمة
if( num1 == num2 ) {
return 0;
}
// سترجع 1 إلى مكان الإستدعاء num2 أكبر من قيمة num1 في حال كانت قيمة
else if( num1 > num2 ) {
return 1;
}
// -1 هي الأكبر و عندها سيتم إرجاع num2 الإحتمال الأخير أن تكون قيمة
else {
return -1;
}
}
}
Main.java
public class Main {
public static void main(String[] args) {
// منه compare() حتى نستطيع استخدام الدالة IntegersComparator هنا قمنا بإنشاء كائن من الكلاس
IntegersComparator ic = new IntegersComparator();
// هنا قمنا بمقارنة عددين مع بعضها في كل مرة مع عرض نتيجة المقارنة
System.out.println( ic.compare(20, 10) );
System.out.println( ic.compare(10, 20) );
System.out.println( ic.compare(20, 20) );
}
}
سنحصل على النتيجة التالية عند التشغيل.
1
-1
0
0
0