मेरे पास ऑब्जेक्ट का ऐरेलिस्ट है। ऑब्जेक्ट में date
और value
विशेषताएँ हैं। तो मैं वस्तुओं को date
पर सॉर्ट करना चाहता हूं, और उसी तारीख में सभी ऑब्जेक्ट्स के लिए मैं उन्हें value
पर सॉर्ट करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?एकाधिक गुणों पर एक ArrayList आधार को सॉर्ट करें
उत्तर
एक कस्टम Comparator
लागू करें, फिर Collections.sort(List, Comparator)
का उपयोग करें। यह शायद कुछ इस तरह दिखेगा:
public class FooComparator implements Comparator<Foo> {
public int compare(Foo a, Foo b) {
int dateComparison = a.date.compareTo(b.date);
return dateComparison == 0 ? a.value.compareTo(b.value) : dateComparison;
}
}
Collections.sort(foos, new FooComparator());
वस्तु के वर्ग तुलनीय लागू करता है, तो सब आप ठीक ढंग से पहले दिनांकों तुलना करने के लिए compareTo विधि कोड है क्या करने की जरूरत है, और फिर यदि दिनांक बराबर हैं, मानों की तुलना , और फिर निष्कर्षों के आधार पर उचित int परिणाम वापस कर दें।
या आप को लागू करता है एक तुलनाकारी साथ ऐसा कर सकते है जैसा ऊपर बताया गया है कि यदि आप वर्ग को लागू करने योग्य नहीं बनाना चाहते हैं .... आपकी पसंद। यदि आप एक तुलनाकर्ता का उपयोग करते हैं, तो तुलना विधि उपरोक्त मेरे सुझाव का उपयोग करेगी। –
यदि आप चाहते हैं नमूना कोड की तरह कर सकते हैं लग रहा है, तो आपको निम्न का उपयोग करें:
Collections.sort(foos, new Comparator<Foo>{
public int compare(Foo a, Foo b) {
int dateComparison = a.date.compareTo(b.date);
return dateComparison == 0 ? a.value.compareTo(b.value) : dateComparison;
}
});
public static <T> void sort(List<T> list, final List<Comparator<T>> comparatorList) {
if (comparatorList.isEmpty()) {//Always equals, if no Comparator.
throw new IllegalArgumentException("comparatorList is empty.");
}
Comparator<T> comparator = new Comparator<T>() {
public int compare(T o1, T o2) {
for (Comparator<T> c:comparatorList) {
if (c.compare(o1, o2) > 0) {
return 1;
} else if (c.compare(o1, o2) < 0) {
return -1;
}
}
return 0;
}
};
Collections.sort(list, comparator);
}
अपने स्वयं को लागू करने के बजाय तुलनाकर्ताओं को मर्ज करने के लिए लाइब्रेरी कॉल का उपयोग करने पर विचार करें - अमरूद की 'ऑर्डरिंग' श्रेणी देखें: http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect /Ordering.html –
- 1. एकाधिक गुणों पर एक बार
- 2. गुणों द्वारा एंड्रॉइड सॉर्ट सरणीसूची
- 3. एक ही मान को एकाधिक गुणों (सीएसएस) पर सेट करें
- 4. एकाधिक कॉलम पर DataGridView सॉर्ट करें?
- 5. जावा: जगह में एक ArrayList को सॉर्ट करना
- 6. विशेषता 'डेटा-सॉर्ट' के आधार पर Jquery में divs को सॉर्ट करें?
- 7. एक दो आयाम ArrayList सॉर्ट करने के लिए कैसे
- 8. एक ही इंडेक्स पर ArrayList में एकाधिक मान जोड़ना
- 9. एक गणना पर MySQL सॉर्ट
- 10. एकाधिक सॉर्ट डिस्क्रिप्टरों को सेट करना
- 11. रेल सक्रिय ActiveCecord - एकाधिक गुणों पर खोजें
- 12. एकाधिक कक्षाओं के आधार पर तत्व का चयन करें
- 13. संबंधित ऑब्जेक्ट संग्रह की विशेषता के आधार पर कोर डेटा परिणामों को कैसे सॉर्ट करें?
- 14. सॉर्ट के आधार पर कर्सर शैली बदलें या
- 15. मूल्य के आधार पर मानचित्रों को छंटनी
- 16. एकाधिक सिस्टम गुणों को सेट करें जावा कमांड लाइन
- 17. जावा में गुणों को कैसे क्रमबद्ध करें?
- 18. क्रमबद्ध/फिल्टर संबंध गुणों के आधार पर नोड्स
- 19. कई फ़ील्ड पर ग्रेल्स मैपिंग सॉर्ट :: एकाधिक नक्शा प्रविष्टियों पर ग्रोवी सॉर्ट
- 20. जावा में एक स्ट्रिंग को सॉर्ट करें
- 21. एक ArrayList
- 22. संशोधित जावा ArrayList पर
- 23. गुणों को सॉर्ट करने के लिए एक्सएसएल का उपयोग
- 24. एकाधिक मोंगोस स्कीमा गुणों को मान्य करना?
- 25. कोरडाटा कई रिश्तों पर सॉर्ट करें
- 26. मैं कैसे कोषगत एक ArrayList क्रमित करूं?
- 27. एकाधिक कुंजियों से हैश की एक सरणी सॉर्ट पर्ल
- 28. फ़ील्ड में से किसी एक के आधार पर एक टुपल सॉर्ट करना
- 29. फॉर्म पर JQuery-UI सॉर्ट करने योग्य सॉर्ट सबमिट करें
- 30. क्यों ** सॉर्ट नहीं करता ** प्रत्येक मशीन पर समान सॉर्ट करें?
संभालने 'मान' कुछ वर्ग कि' Comparable' ... – harto