2012-11-14 20 views
8

मुझे पता है कि Collections.sort(myArrayList) स्ट्रिंग्स होने पर वर्णमाला में सरणीसूची को क्रमबद्ध कर सकते हैं, लेकिन जब वे String सहित दो या अधिक चर वाले डेटा ऑब्जेक्ट जैसे कुछ जटिल होते हैं। क्या उन्हें सॉर्ट करने का कोई तरीका है?जटिल वस्तुओं की क्रमबद्ध सारणी क्रमबद्ध रूप से

यदि Collections के साथ कोई रास्ता नहीं है तो मैं प्रत्येक ऑब्जेक्ट के तारों को देखने के लिए लूप या मानक सॉर्टिंग एल्गोरिदम बनाने की कल्पना कर सकता हूं और ऑब्जेक्ट की अनुक्रमणिका को सरणी में ले जा सकता हूं।

लेकिन मैं मुख्य रूप से सोच रहा था कि अगर मैं Collections तरीकों

+0

अमरूद पुस्तकालय है महान बाहर के- समग्र तुलनित्र बनाने के लिए -बॉक्स समर्थन। इसकी जांच - पड़ताल करें। –

+0

यह भी मदद कर सकता है http://stackoverflow.com/questions/2839137/how-to-use-comparator-in-java-to-sort – Adrian

+0

जावाडॉक पढ़ने से आपको सही दिशा में इंगित किया जाएगा। – Raedwald

उत्तर

26

उपयोग the function taking as second parameter a Comparator के बारे में कुछ अनदेखी की।

Il आपको अपनी आवश्यकताओं के अनुसार सॉर्टेटर के उदाहरण को पारित करने की अनुमति देता है। ध्यान दें कि javadoc of Comparator में तुलनित्रों के निर्माण के संबंध में दिशानिर्देश हैं।

यदि आप केवल स्थानीय रूप से उपयोग किए जाने पर तुलनित्र को अज्ञात वर्ग के रूप में परिभाषित कर सकते हैं। यहाँ एक उदाहरण है जहाँ मैं वस्तुओं को अपने खेतों से एक के लिए के बारे में है जो एक स्ट्रिंग है सॉर्ट है:

Collections.sort(groupResults, new Comparator<ProductSearchResult>() { 
    public int compare(ProductSearchResult result1, ProductSearchResult result2) { 
     return result1.product.getRsId().compareTo(result2.product.getRsId()); 
    } 
}); 

वैकल्पिक रूप से, आप भी अपने वर्ग Comparable इंटरफ़ेस को लागू कर सकता है, लेकिन इस अर्थ केवल यदि आप एक प्राकृतिक परिभाषित कर सकते हैं (स्पष्ट करता है) आदेश।

+1

इसके अलावा, तुलनात्मक लागू करने के संबंध में, यह समझ में आता है यदि आप हमेशा उसी प्रकार की सूचियों को क्रमबद्ध करना चाहते हैं। यदि आप विभिन्न परिस्थितियों में अलग-अलग ऑर्डर करना चाहते हैं, तो संग्रह .sort() में एक तुलनाकर्ता को पास करना संभवतः जाने का तरीका है। –

+2

धन्यवाद यह मैंने देखा है तुलनात्मक के बिंदु उदाहरण के लिए सबसे अधिक था – CQM

12

मैं तुलनाकारी इंटरफेस को लागू करने एक आंतरिक वर्ग बनाना होगा:

public class Car { 
public double horsePower; 

class CarHorsePowerComparator implements Comparator<Car> { 
    @Override 
    public int compare(Car car1, Car car2) { 
     return Integer.valueOf(car.horsePower).compareTo(Integer.valueOf(car2.horsePower))   } 
    } 
} 

अब जब आप अश्वशक्ति के आधार पर आपके कार सूची क्रमबद्ध करना चाहते हैं:

List<Car> list = new ArrayList<Car>(myCars); //your Car list 
Collections.sort(list, new CarHorsePowerComparator()); 
संबंधित मुद्दे