অর্ডার করার উদ্দেশ্যে সম্পর্কিত টিউটোরিয়াল এখানে:
যদিও আমি কিছু উদাহরণ দেব, তবে যাইহোক এটি পড়ার পরামর্শ দেব।
একটি বাছাই করার বিভিন্ন উপায় আছে ArrayList। যদি আপনি কোনও প্রাকৃতিক (ডিফল্ট) ক্রম সংজ্ঞায়িত করতে চান তবে আপনাকে Contactবাস্তবায়ন করতে হবে Comparable। ধরে nameনিই যে আপনি ডিফল্ট অনুসারে বাছাই করতে চান , তারপরে (সরলতার জন্য বাদ দেওয়া শূন্যস্থানগুলি):
public class Contact implements Comparable<Contact> {
private String name;
private String phone;
private Address address;
public int compareTo(Contact other) {
return name.compareTo(other.name);
}
// Add/generate getters/setters and other boilerplate.
}
যাতে আপনি ঠিক করতে পারেন
List<Contact> contacts = new ArrayList<Contact>();
// Fill it.
Collections.sort(contacts);
আপনি যদি কোনও বাহ্যিক নিয়ন্ত্রণযোগ্য অর্ডারিং (যা প্রাকৃতিক ক্রমকে ওভার্রাইড করে) সংজ্ঞায়িত করতে চান , তবে আপনাকে একটি তৈরি করতে হবে Comparator:
List<Contact> contacts = new ArrayList<Contact>();
// Fill it.
// Now sort by address instead of name (default).
Collections.sort(contacts, new Comparator<Contact>() {
public int compare(Contact one, Contact other) {
return one.getAddress().compareTo(other.getAddress());
}
});
এমনকি আপনি নিজের Comparatorমধ্যে এটি সংজ্ঞায়িত Contactকরতে পারেন যাতে আপনি প্রতিবার পুনরায় তৈরি করার পরিবর্তে সেগুলি পুনরায় ব্যবহার করতে পারেন:
public class Contact {
private String name;
private String phone;
private Address address;
// ...
public static Comparator<Contact> COMPARE_BY_PHONE = new Comparator<Contact>() {
public int compare(Contact one, Contact other) {
return one.phone.compareTo(other.phone);
}
};
public static Comparator<Contact> COMPARE_BY_ADDRESS = new Comparator<Contact>() {
public int compare(Contact one, Contact other) {
return one.address.compareTo(other.address);
}
};
}
যা নিম্নলিখিত হিসাবে ব্যবহার করা যেতে পারে:
List<Contact> contacts = new ArrayList<Contact>();
// Fill it.
// Sort by address.
Collections.sort(contacts, Contact.COMPARE_BY_ADDRESS);
// Sort later by phone.
Collections.sort(contacts, Contact.COMPARE_BY_PHONE);
এবং উপরের অংশটি ক্রিম করার জন্য, আপনি জেনেরিক জাবাবেইনের তুলনামূলক ব্যবহার করতে পারেন :
public class BeanComparator implements Comparator<Object> {
private String getter;
public BeanComparator(String field) {
this.getter = "get" + field.substring(0, 1).toUpperCase() + field.substring(1);
}
public int compare(Object o1, Object o2) {
try {
if (o1 != null && o2 != null) {
o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);
o2 = o2.getClass().getMethod(getter, new Class[0]).invoke(o2, new Object[0]);
}
} catch (Exception e) {
// If this exception occurs, then it is usually a fault of the developer.
throw new RuntimeException("Cannot compare " + o1 + " with " + o2 + " on " + getter, e);
}
return (o1 == null) ? -1 : ((o2 == null) ? 1 : ((Comparable<Object>) o1).compareTo(o2));
}
}
যা আপনি নিম্নলিখিত হিসাবে ব্যবহার করতে পারেন:
// Sort on "phone" field of the Contact bean.
Collections.sort(contacts, new BeanComparator("phone"));
(আপনি কোডটিতে দেখতে পাচ্ছেন, সম্ভবত এনপিই এর বাছাইয়ের সময় এড়াতে নাল ক্ষেত্রগুলি ইতিমধ্যে কভার করা হয়েছে)