জাভার Comparable এবং Comparator ইন্টারফেস দুটি সাধারণত ব্যবহার করা হয় অবজেক্টের মধ্যে ক্রমানুসারে সাজানোর জন্য। এই ইন্টারফেসগুলোতে জেনেরিক্স ব্যবহার করে টাইপ-সেইফ এবং ফ্লেক্সিবল কোড তৈরি করা যায়।
Comparable Interface:
উদাহরণ: Student ক্লাসের অবজেক্ট সাজানো
import java.util.*;
class Student implements Comparable<Student> {
private String name;
private int marks;
public Student(String name, int marks) {
this.name = name;
this.marks = marks;
}
public String getName() {
return name;
}
public int getMarks() {
return marks;
}
@Override
public int compareTo(Student other) {
// Ascending order by marks
return Integer.compare(this.marks, other.marks);
}
@Override
public String toString() {
return "Student{name='" + name + "', marks=" + marks + "}";
}
}
public class ComparableExample {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("Alice", 85));
students.add(new Student("Bob", 75));
students.add(new Student("Charlie", 95));
// Sorting using Comparable
Collections.sort(students);
System.out.println("Sorted Students by Marks (Ascending):");
for (Student student : students) {
System.out.println(student);
}
}
}
আউটপুট:
Sorted Students by Marks (Ascending):
Student{name='Bob', marks=75}
Student{name='Alice', marks=85}
Student{name='Charlie', marks=95}
Comparator Interface:
উদাহরণ: একাধিক ক্রাইটেরিয়ায় সাজানো
import java.util.*;
class Student {
private String name;
private int marks;
public Student(String name, int marks) {
this.name = name;
this.marks = marks;
}
public String getName() {
return name;
}
public int getMarks() {
return marks;
}
@Override
public String toString() {
return "Student{name='" + name + "', marks=" + marks + "}";
}
}
class NameComparator implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
// Ascending order by name
return s1.getName().compareTo(s2.getName());
}
}
class MarksComparator implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
// Descending order by marks
return Integer.compare(s2.getMarks(), s1.getMarks());
}
}
public class ComparatorExample {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("Alice", 85));
students.add(new Student("Bob", 75));
students.add(new Student("Charlie", 95));
// Sorting by Name
Collections.sort(students, new NameComparator());
System.out.println("Sorted Students by Name (Ascending):");
for (Student student : students) {
System.out.println(student);
}
// Sorting by Marks
Collections.sort(students, new MarksComparator());
System.out.println("\nSorted Students by Marks (Descending):");
for (Student student : students) {
System.out.println(student);
}
}
}
আউটপুট:
Sorted Students by Name (Ascending):
Student{name='Alice', marks=85}
Student{name='Bob', marks=75}
Student{name='Charlie', marks=95}
Sorted Students by Marks (Descending):
Student{name='Charlie', marks=95}
Student{name='Alice', marks=85}
Student{name='Bob', marks=75}
Lambda Expressions এবং Comparator:
উদাহরণ: Comparator Lambda ব্যবহার
import java.util.*;
class Student {
private String name;
private int marks;
public Student(String name, int marks) {
this.name = name;
this.marks = marks;
}
public String getName() {
return name;
}
public int getMarks() {
return marks;
}
@Override
public String toString() {
return "Student{name='" + name + "', marks=" + marks + "}";
}
}
public class LambdaComparatorExample {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("Alice", 85));
students.add(new Student("Bob", 75));
students.add(new Student("Charlie", 95));
// Sorting by Name using Lambda
students.sort((s1, s2) -> s1.getName().compareTo(s2.getName()));
System.out.println("Sorted Students by Name (Ascending):");
for (Student student : students) {
System.out.println(student);
}
// Sorting by Marks using Lambda
students.sort((s1, s2) -> Integer.compare(s2.getMarks(), s1.getMarks()));
System.out.println("\nSorted Students by Marks (Descending):");
for (Student student : students) {
System.out.println(student);
}
}
}
কেন জেনেরিক্স ব্যবহার গুরুত্বপূর্ণ?
- টাইপ সেফটি: অবজেক্টের টাইপ কাস্ট করতে হয় না।
- Reusable Code: একাধিক টাইপের জন্য একই Comparator বা Comparable ব্যবহার করা যায়।
- Compile-Time Checking: টাইপ মিসম্যাচ এড়ায়।
- Readable Code: টাইপ কাস্টিং ছাড়া কোড সহজে বোঝা যায়।
ComparableএবংComparatorইন্টারফেস জাভার বাস্তব জীবনের সমস্যাগুলো সমাধান করতে সাহায্য করে, বিশেষত অবজেক্ট সাজানোর ক্ষেত্রে।- জেনেরিক্স টাইপ সেফটি এবং কোডের পুনঃব্যবহার নিশ্চিত করে, বড় আকারের প্রজেক্টে কার্যকর ভূমিকা পালন করে।
Content added By
Read more