2015-12-20 5 views
6

desc कैसे पूर्णांक मान द्वारा एक hashmap और जवाब है कि मैंने पाया में से एक को सॉर्ट करने है hereप्रकार पूर्णांक मान द्वारा एक hashmap

कि Dorofeevएव्गेनि द्वारा लिखित और उनके जवाब इस

की तरह था
HashMap<String, Integer> map = new HashMap<String, Integer>(); 
    map.put("a", 4); 
    map.put("c", 6); 
    map.put("b", 2); 
    Object[] a = map.entrySet().toArray(); 
    Arrays.sort(a, new Comparator() { 
     public int compare(Object o1, Object o2) { 
      return ((Map.Entry<String, Integer>) o2).getValue().compareTo(
        ((Map.Entry<String, Integer>) o1).getValue()); 
     } 
    }); 
    for (Object e : a) { 
     System.out.println(((Map.Entry<String, Integer>) e).getKey() + " : " 
       + ((Map.Entry<String, Integer>) e).getValue()); 
    } 

उत्पादन

c : 6 
a : 4 
b : 2 

मेरा सवाल यह है कि कैसे Desc बन गया ?? और यदि मैं HashMapएएससी सॉर्ट करना चाहता हूं तो मैं यह कैसे कर सकता हूं ??

और अंतिम प्रश्न यह है: सॉर्टिंग के बाद मेरा पहला तत्व कैसा हो सकता है?

+2

आप शायद 'compare' विधि में' o1' साथ o2' स्विचिंग 'द्वारा क्रम को उल्टा कर सकते हैं - हो रही पहला तत्व बस है 'एक [0] 'और उसके बाद वैल्यू और कुंजी प्राप्त करने के लिए लूप के समान तर्क का उपयोग करें !? – luk2302

+0

thanx @ luk2302 :) –

+1

संभावित डुप्लिकेट [जावा में मानों पर मानचित्र को कैसे क्रमबद्ध करें?] (Http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on -the-values-in-java) –

उत्तर

6

व्यस्त क्रम स्विच o2 और o1 के लिए। पहला तत्व सिर्फ सूचकांक 0 पर सरणी का उपयोग प्राप्त करने के लिए:

Map<String, Integer> map = new HashMap<>(); 
map.put("a", 4); 
map.put("c", 6); 
map.put("b", 2); 
Object[] a = map.entrySet().toArray(); 
Arrays.sort(a, new Comparator() { 
    public int compare(Object o1, Object o2) { 
     return ((Map.Entry<String, Integer>) o1).getValue().compareTo(
       ((Map.Entry<String, Integer>) o2).getValue()); 
    } 
}); 
for (Object e : a) { 
    System.out.println(((Map.Entry<String, Integer>) e).getKey() + " : " 
        + ((Map.Entry<String, Integer>) e).getValue()); 
}   

System.out.println("first element is " + ((Map.Entry<String, Integer>) a[0]).getKey() + " : " 
     + ((Map.Entry<String, Integer>) a[0]).getValue());   

कौन सा प्रिंट

ख: 2
एक: 4
ग: 6
पहला तत्व ख है: 2

यदि आपके पास लैम्ब्डा अभिव्यक्ति तक पहुंच है तो आप उन का उपयोग करके सॉर्टिंग को सरल बना सकते हैं:

Arrays.sort(a, (o1, o2) -> 
    ((Map.Entry<String, Integer>) o1).getValue().compareTo(((Map.Entry<String, Integer>) o2).getValue())); 
2

सबसे पहले, अपने प्रश्न का उत्तर दें: एएससी को डीईएससी में बदलने के लिए compare विधि के परिणाम को उलट दें।

HashMap<String, Integer> map = new HashMap<String, Integer>(); 
map.put("a", 4); 
map.put("c", 6); 
map.put("b", 2); 
Object[] a = map.entrySet().toArray(); 
Arrays.sort(a, new Comparator() { 
    public int compare(Object o1, Object o2) { 
     // just reverse the result of the comparison 
     return -((Map.Entry<String, Integer>) o2).getValue().compareTo(
       ((Map.Entry<String, Integer>) o1).getValue()); 
    } 
}); 
for (Object e : a) { 
    System.out.println(((Map.Entry<String, Integer>) e).getKey() + " : " 
      + ((Map.Entry<String, Integer>) e).getValue()); 
} 

लेकिन अगर आप एक हल कर Map के साथ काम करने की जरूरत है, मैं तुम्हें TreeMap का एक उदाहरण है कि अपने आप में छंटाई हैंडल का उपयोग सुझाव देते हैं।

+0

thanx बहुत अधिक @Orlangure –

3

जावा 8 में, आप की तरह कुछ कर सकता है:

System.out.println(map.entrySet().stream().sorted((o1, o2) -> { 
     return o2.getValue().compareTo(o1.getValue()); 
    }).findFirst());//would return entry boxed into optional which you can unbox. 
+0

उत्तर के लिए thanx :) –

+0

कोई जांच नहीं .. इसकी संक्षिप्त और पढ़ने में अासान। आपको ऑब्जेक्ट से एंट्री और इसके विपरीत कई रूपांतरण नहीं करना पड़ेगा। – SMA

+0

हां यह कोड को बहुत सरल बनाता है –

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