2013-02-01 16 views
6

मेरे पास नक्शा है: TreeMap<String, Integer> m = new TreeMap<>(); जहां मेरे पास एक संपूर्ण वर्णमाला और मूल्य है, जो दिखाता है कि मेरे पाठ में प्रत्येक पत्र कितनी बार पाया गया था।ट्रीमैप <स्ट्रिंग, इंटीजर> को कैसे हल करें?

मैं उस मानचित्र को अवरोही गिनती क्रम में सॉर्ट करना चाहता हूं; यही है, सबसे लगातार पत्र पहली पंक्ति पर है, और आउटपुट की आखिरी पंक्ति कम से कम लगातार पत्र इंगित करती है। यदि दो अक्षरों में समान आवृत्ति है, तो अक्षर जो पहले वर्णमाला में आता है, पहले दिखाई देना चाहिए। इसे कैसे बनाया जाए?

मैं तुलनाकारी साथ करने की कोशिश की:

public int compare(String a, String b) { 
     if (base.get(a) >= base.get(b) && a.compareToIgnoreCase(b) < 0) { 
      return -1; 
     } else { 
      return 1; 
     } 
    } 

लेकिन अभी भी, इसकी नहीं यह, उत्पादन होता है:

D 3 
E 3 
A 2 
S 5 

दोस्तों ... इस मिले से पहले, इस फ्लॉप मदद बिल्कुल। अच्छा उत्पादन किया जाना चाहिए: -: प्राकृतिक तरह आम में कुछ भी नहीं है के रूप में अपने छँटाई इच्छा के साथ

public int compare(String a, String b) { 
    if (base.get(a) > base.get(b)) { 
     return -1; 
    } else if (base.get(a) < base.get(b)) { 
     return 1; 
    } else { 
     int stringCompare = a.compareToIgnoreCase(b); 
     return stringCompare == 0 ? 1 : stringCompare; // returning 0 would merge keys 
    } 
} 
+0

सटीक डुप्लिकेट http://stackoverflow.com/questions/3074154/sorting-a-hashmap-based-on-value-then-key – JohnJohnGa

+0

एक और डुप्लिकेट http://stackoverflow.com/questions/1448369/how-to-sort- ए-ट्रेमैप-ऑन-ऑन-वैल्यू – mellamokb

+0

@ जॉन जोहानगा: नहीं। मेरा सवाल थोड़ा अलग है। मेरा संपादन देखें – Katie

उत्तर

3

आपका तुलनित्र सही नहीं लगता है यह बेहतर काम करना चाहिए

List<Map.Entry<String, Integer>> entries = new ArrayList<>(m.entrieSet()); 

Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() { 
    @Override 
    public int compare(Map.Entry<String, Integer >a, Map.Entry<String, Integer>b) { 
     if (a.getValue() < b.getValue()) { // Descending values 
      return 1; 
     } else if (a.getValue() > b.getValue()) { 
      return -1; 
     } 
     return -a.getKey().compareTo(b.getKey()); // Descending keys 
    }  
}); 
+0

ठीक है, अभी काम कर रहा है! – Katie

+0

@ केटी क्षमा करें यह आरोही क्रम में था - संशोधित। – assylias

+0

ठीक है, आराम करो :) हल हो गया, मदद के लिए बहुत बहुत धन्यवाद! – Katie

3

:

S 5 
D 3 
E 3 
A 2 
+0

+1। ओपी की तरह मूल्य से एक तुलनित्र लिखने का प्रयास करना एक आश्चर्यजनक बुरा विचार है, और आपके कोड को भ्रमित करने, आश्चर्यजनक और असंभव-से-डीबग मैस के लिए बर्बाद कर देगा। –

संबंधित मुद्दे