पाठ 27 / 38

Comparable बनाम Comparator

Comparable से अपनी क्लास को एक प्राकृतिक क्रम दें, या Comparator से जितने चाहें उतने कस्टम क्रम परिभाषित करें, और उन्हें आसानी से जोड़ें।

एक क्रम बनाम कई

Comparable<T> को क्लास खुद लागू करती है और compareTo से अपना एक "प्राकृतिक" क्रम परिभाषित करती है। Comparator<T> एक अलग ऑब्जेक्ट है जो बाहर से क्रम परिभाषित करता है — एक ही क्लास के लिए जितने चाहें उतने comparator हो सकते हैं।

Comparable

कम-से-कम/बराबर/अधिक बताने के लिए negative/शून्य/positive लौटाएँ। इससे Collections.sort(list)TreeSet बिना अतिरिक्त आर्ग्युमेंट काम करते हैं।

class Employee implements Comparable<Employee> {
    int age;
    public int compareTo(Employee other) {
        return Integer.compare(this.age, other.age);
    }
}
Collections.sort(employees);   // sorted by age

Comparator, आसानी से

Comparator.comparing(...) की-एक्सट्रैक्टर से comparator बनाता है; टाई तोड़ने के लिए .thenComparing(...) और क्रम पलटने के लिए .reversed() जोड़ें — Employee क्लास को छुए बिना।

Comparator<Employee> byNameThenAge =
    Comparator.comparing((Employee e) -> e.name)
               .thenComparing(e -> e.age);

employees.sort(byNameThenAge.reversed());