मैं इस Enum को उल्टे वर्णमाला क्रम के रूप में सॉर्ट करना चाहता हूं और इसे वापस करना चाहता हूं। जब मैं इसे ओवरराइड करके तुलना करने की विधि का उपयोग करने का प्रयास करता हूं तो मैंने देखा कि इसे अंतिम के रूप में घोषित किया गया है।

तुलना के साथ समान एनम को ओवरराइड करने का कोई तरीका है

इसे सॉर्ट करना कैसे संभव है इसलिए मुझे मिलता है:

डी, सी, बी, ए

public enum Test { 
 C(1)
 B(2)
 A(3)
 D(4)
}
1
john tame 6 अप्रैल 2020, 03:31

2 जवाब

चूंकि आप enum पर java.lang.Comparable को लागू नहीं कर सकते हैं, एक तरीका यह है कि नाम पर enum की तुलना करने के लिए एक आवरण java.util.Set बनाया जाए।

Set<Test> testEnumSet = new TreeSet<>(new Comparator<Test>() {
   @Override
   public int compare(Test first, Test second) {
      return second.name().compareTo(first.name());
   }
});

testEnumSet.addAll(Arrays.asList(Test.values()));

यह प्रकार का उत्पादन करेगा

[D, C, B, A]

क्रम को आरोही में बदलने के लिए:

return -(second.name().compareTo(first.name()));
0
Doi9t 6 अप्रैल 2020, 03:54

Enum का कार्यान्वयन compareTo(), एनम के ordinal मान पर आधारित है।

ordinal है:

  • एक आदिम final int मान
  • निर्माण के दौरान सौंपा गया
  • एनम घोषणा के आदेश के आधार पर
  • 0 से शुरू (शून्य)

इसलिए, यदि आप चाहते हैं कि एनम एक अलग क्रम में छाँटें, तो आप उन्हें उसी क्रम में घोषित कर सकते हैं:

public enum Test { D(4), C(1), B(2), A(3) }

(सुनिश्चित नहीं है कि आप कंस्ट्रक्टर को दिए गए मूल्यों का प्रतिनिधित्व करते हैं, इसलिए मैंने आपके मूल्यों को बनाए रखा)

0
Sean Mickey 6 अप्रैल 2020, 08:34