"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية كتابة وظيفة المقارنة المخصصة في جافا؟

كيفية كتابة وظيفة المقارنة المخصصة في جافا؟

تم النشر بتاريخ 2024-11-01
تصفح:483

How to Write a Custom Comparator Function in Java?

1. فهم أساسيات المقارنة في جافا

في Java، توفر واجهة Comparator طريقة لمقارنة كائنين لتحديد ترتيبهما. يعد هذا مفيدًا بشكل خاص عندما تريد فرز مجموعات مثل القوائم أو المصفوفات بترتيب مخصص.

هناك حاجة إلى Comparator عندما لا يلبي الترتيب الطبيعي للكائنات (كما هو محدد بواسطة تنفيذها القابل للمقارنة) احتياجاتك. على سبيل المثال، قد يتطلب فرز قائمة كائنات الموظف حسب الراتب أو الاسم أو العمر مقارنات مختلفة.

2. كتابة دالة المقارنة المخصصة

فلنتعرف على عملية إنشاء المقارنة المخصصة.

2.1 مثال: فرز قائمة الموظفين حسب الراتب

فكر في فئة الموظف مع الحقول الاسم و العمر و الراتب. نريد فرز قائمة كائنات الموظف حسب الراتب بترتيب تصاعدي.

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 وتتجاوز طريقة المقارنة لمقارنة الموظفين حسب رواتبهم.

2.2 العرض التوضيحي: فرز قائمة الموظفين

الآن، دعونا ننشئ قائمة بالموظفين ونصنفها باستخدام المقارنة المخصصة لدينا.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List employees = 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);
    }
}

2.3 نتيجة العرض

سيؤدي تشغيل الكود أعلاه إلى إنتاج المخرجات التالية:

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}

يتم الآن فرز قائمة الموظفين حسب رواتبهم بترتيب تصاعدي، وذلك بفضل المقارنة المخصصة.

3. المقارنات المخصصة المتقدمة

في بعض الأحيان، قد تحتاج إلى منطق مقارنة أكثر تعقيدًا أو ترغب في الفرز حسب حقول متعددة.

3.1 مثال: الفرز حسب معايير متعددة

دعونا نعدل المقارنة للفرز أولاً حسب الراتب ثم حسب الاسم في حالة التعادل.

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

3.2 العرض التوضيحي: الفرز حسب الراتب والاسم

باستخدام SalaryThenNameComparator، يمكنك الآن فرز الموظفين حسب الراتب والاسم:

Collections.sort(employees, new SalaryThenNameComparator());

4. الاستنتاج

تتيح لك كتابة وظيفة مقارنة مخصصة في Java تخصيص سلوك فرز المجموعات لتلبية الاحتياجات المحددة. سواء كنت بحاجة إلى مقارنة بسيطة بحقل واحد أو فرز معقد وفقًا لمعايير متعددة، فإن Comparator يوفر حلاً مرنًا وقويًا.

إذا كان لديك أي أسئلة أو كنت بحاجة إلى مزيد من التوضيح، فلا تتردد في ترك تعليق أدناه!

اقرأ المزيد من المشاركات على : كيفية كتابة دالة مقارنة مخصصة في Java؟

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/anh_trntun_4732cf3d299/how-to-write-a-custom-comparator-function-in-java-198j?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3