"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > एकाधिक फ़ील्ड का उपयोग करके जावा में ऑब्जेक्ट की सूची को कैसे क्रमबद्ध करें?

एकाधिक फ़ील्ड का उपयोग करके जावा में ऑब्जेक्ट की सूची को कैसे क्रमबद्ध करें?

2024-11-07 को प्रकाशित
ब्राउज़ करें:583

 How to Sort a List of Objects in Java Using Multiple Fields?

जावा में एकाधिक फ़ील्ड के साथ सूची ऑब्जेक्ट की कस्टम सॉर्टिंग

हालांकि एक फ़ील्ड के आधार पर सूची में ऑब्जेक्ट को सॉर्ट करना सीधा है, कई फ़ील्ड का उपयोग करके सॉर्ट करना थोड़ा मुश्किल हो सकता है . यह आलेख कई क्षेत्रों द्वारा क्रमबद्ध करने के मुद्दे पर प्रकाश डालता है और जावा में उपलब्ध विभिन्न समाधानों की पड़ताल करता है।

समस्या

एक परिदृश्य पर विचार करें जहां आपके पास तीन क्षेत्रों के साथ "रिपोर्ट" ऑब्जेक्ट की एक सूची है : रिपोर्टकी, छात्र संख्या, और स्कूल। आप इस सूची को सभी तीन फ़ील्ड का उपयोग करके एक विशिष्ट क्रम में क्रमबद्ध करना चाहते हैं।

आपके द्वारा प्रदान किया गया कोड स्निपेट एक कस्टम तुलनित्र के साथ Collections.sort का उपयोग करके सूची को क्रमबद्ध करने का प्रयास करता है, लेकिन किसी कारण से, क्रमबद्धता काम नहीं कर रही है आशा के अनुसार। आपको संदेह है कि कोड के साथ कोई समस्या हो सकती है।

विश्लेषण

आपके कोड में वास्तव में कोई समस्या है। आइए समस्या का विश्लेषण करें और सही समाधान की पहचान करें।

सही कोड

प्रदान किए गए कोड में समस्या तीन क्षेत्रों के संयोजन में है:

return (record1.getReportKey()   record1.getStudentNumber()   record1.getSchool()).compareTo(record2.getReportKey()   record2.getStudentNumber()   record2.getSchool());

यह संयोजन मानता है कि फ़ील्ड हैं स्ट्रिंग टाइप करें. हालाँकि, आपके मामले में, सभी तीन फ़ील्ड को स्ट्रिंग प्रकार के रूप में परिभाषित किया गया है, इसलिए संयोजन का परिणाम केवल एक स्ट्रिंग तुलना में होगा। यह संभवतः वह नहीं है जो आप चाहते थे।

फ़ील्ड की सही तुलना करने के लिए, आपको उनकी अलग-अलग और सही क्रम में तुलना करने की आवश्यकता है:

return Comparator.comparing(Report::getReportKey)
        .thenComparing(Report::getStudentNumber)
        .thenComparing(Report::getSchool)
        .compare(record1, record2);

वैकल्पिक समाधान

सही किए गए कोड के अलावा, यहां जावा में कई क्षेत्रों के आधार पर सॉर्ट करने के लिए वैकल्पिक समाधान दिए गए हैं:

विकल्प 1: BeanComparator

BeanComparator का उपयोग करके चिंतनशील सॉर्टिंग का उपयोग गेटर्स के आधार पर ऑब्जेक्ट को सॉर्ट करने के लिए किया जा सकता है। हालाँकि, यह प्रतिबिंब उपयोग के कारण त्रुटि-प्रवण और कम कुशल है। यह शून्य मानों को भी शालीनता से संभालता है। &&&]

निष्कर्ष

आपकी समस्या का सही समाधान व्यक्तिगत फ़ील्ड तुलनाओं के साथ संशोधित कोड का उपयोग करना है। वैकल्पिक रूप से, आप अपनी विशिष्ट आवश्यकताओं के आधार पर ऊपर चर्चा किए गए अन्य विकल्पों में से एक चुन सकते हैं। एकाधिक फ़ील्ड द्वारा सॉर्टिंग के सिद्धांतों और उपलब्ध टूल के बीच अंतर को समझने से आप अपने जावा अनुप्रयोगों में जटिल सॉर्टिंग परिदृश्यों को प्रभावी ढंग से संभालने में सक्षम होंगे।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3