في Java، توفر واجهة Comparator طريقة لمقارنة كائنين لتحديد ترتيبهما. يعد هذا مفيدًا بشكل خاص عندما تريد فرز مجموعات مثل القوائم أو المصفوفات بترتيب مخصص.
هناك حاجة إلى Comparator عندما لا يلبي الترتيب الطبيعي للكائنات (كما هو محدد بواسطة تنفيذها القابل للمقارنة) احتياجاتك. على سبيل المثال، قد يتطلب فرز قائمة كائنات الموظف حسب الراتب أو الاسم أو العمر مقارنات مختلفة.
فلنتعرف على عملية إنشاء المقارنة المخصصة.
فكر في فئة الموظف مع الحقول الاسم و العمر و الراتب. نريد فرز قائمة كائنات الموظف حسب الراتب بترتيب تصاعدي.
import java.util.Comparator; class Employee { private String name; private int age; private double salary; // Constructor, getters, and setters public Employee(String name, int age, double salary) { this.name = name; this.age = age; this.salary = salary; } public double getSalary() { return salary; } @Override public String toString() { return "Employee{" "name='" name ''' ", age=" age ", salary=" salary '}'; } } class SalaryComparator implements Comparator{ @Override public int compare(Employee e1, Employee e2) { return Double.compare(e1.getSalary(), e2.getSalary()); } }
في هذا المثال، تطبق فئة SalaryComparator واجهة Comparator وتتجاوز طريقة المقارنة لمقارنة الموظفين حسب رواتبهم.
الآن، دعونا ننشئ قائمة بالموظفين ونصنفها باستخدام المقارنة المخصصة لدينا.
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { Listemployees = new ArrayList(); employees.add(new Employee("John", 28, 50000)); employees.add(new Employee("Anna", 32, 75000)); employees.add(new Employee("Mike", 25, 45000)); System.out.println("Before Sorting:"); employees.forEach(System.out::println); // Sort employees by salary Collections.sort(employees, new SalaryComparator()); System.out.println(" After Sorting by Salary:"); employees.forEach(System.out::println); } }
سيؤدي تشغيل الكود أعلاه إلى إنتاج المخرجات التالية:
Before Sorting: Employee{name='John', age=28, salary=50000.0} Employee{name='Anna', age=32, salary=75000.0} Employee{name='Mike', age=25, salary=45000.0} After Sorting by Salary: Employee{name='Mike', age=25, salary=45000.0} Employee{name='John', age=28, salary=50000.0} Employee{name='Anna', age=32, salary=75000.0}
يتم الآن فرز قائمة الموظفين حسب رواتبهم بترتيب تصاعدي، وذلك بفضل المقارنة المخصصة.
في بعض الأحيان، قد تحتاج إلى منطق مقارنة أكثر تعقيدًا أو ترغب في الفرز حسب حقول متعددة.
دعونا نعدل المقارنة للفرز أولاً حسب الراتب ثم حسب الاسم في حالة التعادل.
class SalaryThenNameComparator implements Comparator{ @Override public int compare(Employee e1, Employee e2) { int salaryCompare = Double.compare(e1.getSalary(), e2.getSalary()); if (salaryCompare == 0) { return e1.getName().compareTo(e2.getName()); } return salaryCompare; } }
باستخدام SalaryThenNameComparator، يمكنك الآن فرز الموظفين حسب الراتب والاسم:
Collections.sort(employees, new SalaryThenNameComparator());
تتيح لك كتابة وظيفة مقارنة مخصصة في Java تخصيص سلوك فرز المجموعات لتلبية الاحتياجات المحددة. سواء كنت بحاجة إلى مقارنة بسيطة بحقل واحد أو فرز معقد وفقًا لمعايير متعددة، فإن Comparator يوفر حلاً مرنًا وقويًا.
إذا كان لديك أي أسئلة أو كنت بحاجة إلى مزيد من التوضيح، فلا تتردد في ترك تعليق أدناه!
اقرأ المزيد من المشاركات على : كيفية كتابة دالة مقارنة مخصصة في Java؟
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3