স্কালাতে, কাস্টম সোর্টিং এবং কম্প্যারেটর ব্যবহৃত হয় যখন আমরা ডেটার একটি বিশেষ শর্ত বা কাস্টম ক্রম অনুযায়ী সজ্জিত করতে চাই। স্কালার sortBy, sortWith এবং Ordering এ কাস্টম সোর্টিং করা সম্ভব, এবং কম্প্যারেটর ব্যবহার করে আরো বেশি নিয়ন্ত্রণ পাওয়া যায়।
১. sortBy দিয়ে কাস্টম সোর্টিং
স্কালাতে, sortBy একটি সহজ এবং সাধারণ উপায় সত্ত্বেও একটি কাস্টম ফিল্ড অনুযায়ী কোনো কালেকশন সজ্জিত করতে ব্যবহৃত হয়। এটি সাধারণত লিস্ট, সেট, বা অন্যান্য কালেকশনগুলোর উপর প্রয়োগ করা হয়।
উদাহরণ:
ধরা যাক, আমরা কিছু ছাত্রের একটি লিস্ট রেখেছি, এবং আমরা ছাত্রদের নামের প্রথম অক্ষরের ভিত্তিতে সজ্জিত করতে চাই:
case class Student(name: String, age: Int)
val students = List(
Student("Alice", 22),
Student("Bob", 20),
Student("Charlie", 23)
)
// কাস্টম সোর্টিং: নামের প্রথম অক্ষরের ভিত্তিতে সজ্জিত করা
val sortedByFirstLetter = students.sortBy(student => student.name.head)
sortedByFirstLetter.foreach(println)এখানে, sortBy ব্যবহার করে আমরা name.head (নামের প্রথম অক্ষর) এর ভিত্তিতে সজ্জিত করেছি। আউটপুট হবে:
Student(Bob,20)
Student(Alice,22)
Student(Charlie,23)২. sortWith দিয়ে কাস্টম সোর্টিং
sortWith এর মাধ্যমে আমরা আরও কাস্টম কন্ডিশন দিতে পারি। এটি একটি তুলনা ফাংশন নেয় এবং সেই তুলনাতে দুইটি উপাদানকে তুলনা করে, যেটি Boolean রিটার্ন করে।
উদাহরণ:
ধরা যাক, আমরা আবার সেই একই ছাত্রদের তালিকা ব্যবহার করছি, কিন্তু এবার আমরা তাদের বয়সের ভিত্তিতে সজ্জিত করতে চাই:
val sortedByAge = students.sortWith((student1, student2) => student1.age < student2.age)
sortedByAge.foreach(println)এখানে, sortWith ব্যবহার করে আমরা বয়সের ভিত্তিতে সজ্জিত করেছি (অথবা যেভাবে আমরা চাই সেভাবে)। আউটপুট হবে:
Student(Bob,20)
Student(Alice,22)
Student(Charlie,23)৩. Ordering এবং কাস্টম কম্প্যারেটর
আপনি যদি আরও বেশি কাস্টমাইজেশন চান, তখন Ordering এর মাধ্যমে কাস্টম কম্প্যারেটর তৈরি করতে পারেন। এটি কাস্টম সঠিকভাবে তুলনা করার জন্য একটি উপযুক্ত উপায়।
উদাহরণ:
ধরা যাক, আমরা Student এর একটি লিস্টে বয়স এবং নাম এর ভিত্তিতে কাস্টম সজ্জিত করতে চাই:
implicit val customOrdering: Ordering[Student] = Ordering.by((student: Student) => (student.age, student.name))
val sortedStudents = students.sorted
sortedStudents.foreach(println)এখানে, Ordering.by ব্যবহৃত হয়েছে, যেখানে প্রথমে বয়স দিয়ে তুলনা এবং তারপরে নাম দিয়ে তুলনা করা হয়েছে (যদি বয়স সমান হয়)। আউটপুট হবে:
Student(Bob,20)
Student(Alice,22)
Student(Charlie,23)৪. কম্প্যারেটর (Comparator) ব্যবহার
কম্প্যারেটর এমন একটি অবজেক্ট যা একটি নির্দিষ্ট নিয়ম অনুযায়ী দুইটি অবজেক্টের তুলনা করে। স্কালাতে Comparator ব্যাবহার করা হয় সাধারণত Java's Comparator এর সাথে কাজ করতে।
উদাহরণ:
import java.util.{Comparator, Arrays}
case class Employee(name: String, salary: Double)
val employees = List(
Employee("John", 5000),
Employee("Alice", 8000),
Employee("Bob", 3000)
)
// Comparator এর মাধ্যমে কাস্টম সোর্টিং
val comparator: Comparator[Employee] = new Comparator[Employee] {
def compare(e1: Employee, e2: Employee): Int = {
e1.salary.compareTo(e2.salary) // বেতন অনুযায়ী তুলনা
}
}
val sortedEmployees = employees.sortWith((e1, e2) => comparator.compare(e1, e2) < 0)
sortedEmployees.foreach(println)এখানে, Comparator ব্যবহার করা হয়েছে Employee অবজেক্টের বেতন অনুযায়ী সজ্জিত করতে।
সারাংশ
sortByএবংsortWithসহজ এবং সাধারণ কাস্টম সোর্টিংয়ের জন্য ব্যবহৃত হয়।Orderingব্যবহার করে আপনি কাস্টম কম্প্যারেটর তৈরি করতে পারেন এবং তার মাধ্যমে সজ্জিত করতে পারেন।Comparatorস্কালাতে কম্প্যারেটর তৈরি করতে ব্যবহৃত হয়, যেখানে আপনি নির্দিষ্ট কাস্টম তুলনা ফাংশন ব্যবহার করতে পারেন।
এই কৌশলগুলি স্কালার ডেটা স্ট্রাকচারগুলির সাথে পারফরম্যান্স অপটিমাইজেশন এবং কাস্টম ক্রম নিশ্চিত করতে সহায়ক।
Read more