Skip to content

Sorting_ar

رامي مناف edited this page Aug 27, 2020 · 2 revisions

المرتّبات

عندما تريد الاستعلام عن أسماء الطلاب مرتبين حسب الأبجدية فيمكنك استخدام الدّالة sort من الصّفّ Collections المعادة من الاستعلام إذا كان الصف الذي استعلمت عنه يستخدم النافذة Comparable, لكن ماذا إن أردت ترتيب الطلاب حسب درجات كل طالب في مادة الرياضيات أو العلوم؟ لا يمكنك استخدام النافذة Comparable عدّة مرات, وسيكون بناء Comparator في كلّ مرّة تحتاج لترتيب كائناتك أمرًا مملًّا ويؤدّي إلى كودٍ غير نظيفٍ, لذلك توفّر صفوف إمكانيّة إضافة المرتبات لبعض الأوامر الّتي تدعم المرتّبات, والمرتّبات هي صفوفٌ تستخدم النافذة Sorter والّتي توجد وجميع المرتّبات في الحزمة org.sofof.command.sorter, ومن أهمّ المرتّبات المرتبّ ObjectSorter, ويسمح لك بترتيب الكائنات بالاعتماد على نصٍّ تنفيذيٍّ يشير إلى الكائن الذي سيتمّ ترتيب الكائنات وفقه, فمثلًا إن أردت ترتيب الطلاب وفق أسمائهم فما عليك إلا الإشارة لاسم الطالب بالنّصّ التّنفيذيّ, وهذا مثالٌ:

import org.sofof.bean.Student;
import org.sofof.command.Select;
import org.sofof.command.sorter.ObjectSorter;
import org.sofof.command.sorter.Order;
import org.sofof.permission.User;
import java.io.File;

public class Documentation {
    public static void main(String[] args) throws SofofException {
        Database.createDatabase(new File("sofof"));
        Server s = new Server(new File("sofof"), 6969, false);
        s.getUsers().add(new User("rami", "secret"));
        s.startUp();
        try (Session sess = SessionManager.startSession("sofof:localhost:6969", new User("rami", "secret"), false)) {
            session.query(new Select(Student.class).from("students").sort(new ObjectSorter("#getName()", Order.Aescending)));
        }
    }
}

لاحظ عزيزي القارئ وجود معامل آخر بعد النّصّ التّنفيذيّ في باني المرتّب ObjectSorter, وهذا المعامل هو التعداد Order الموجود في نفس حزمة المرتّبات, ومهمة هذا التعداد تحديد الترتيب تصاعديًّا Aescending كان أم تنازليًّا Descending, ويجدر بالذكر أيضًا أنّ المرتّب ObjectSorter يستطيع ترتيب البيانات البدائية بالإضافة لكل الكائنات التي تستخدم النافذة Comparable والكائن LocalDate أيضًا. في بعض الحالات ستحتاج لترتيب الكائنات عدّة ترتيبات حسب أولويّة كلٍّ منها, ويكفي لفعل ذلك كتابة المُرتّب الأكثر الأَوْلَى متبوعًا بالدّالّة after الّتي تستقبِل المُرتّب الأقلّ أولويّةً.

Clone this wiki locally