2011-05-08 12 views
7

मैं जावा में इस HashMap है एक HashMap freemarker के मूल्यों को सॉर्ट करने:कैसे टेम्पलेट

HashMap<String, String> map = new HashMap<String, String>(); 

    map.put("k1", "3"); 
    map.put("k2", "4"); 
    map.put("k3", "2"); 
    map.put("k4", "6"); 
    map.put("k5", "1"); 
    map.put("k6", "5"); 

मैं इस मोड में freemarker टेम्पलेट के साथ मुद्रित:

<#list map?values as v> 
${v} - 
</#list> 

लेकिन यह इस क्रम में प्रिंट:

2 - 6 - 1 - 5 - 3 - 4 

मैं इस क्रम में प्रिंट करना चाहते हैं:

+०१२३५१६४१०
1 - 2 - 3 - 4 - 5 -6 

मैं freemarker टेम्पलेट के साथ मूल्यों को कैसे क्रमबद्ध कर सकता हूं?

उत्तर

2

यह व्यवहार अनुमानित है क्योंकि हैश मैप्स का आदेश नहीं दिया गया है। टिप्पणियों में एक सॉर्टेड मैप उदा। TreeMap कुंजी पर सॉर्ट करेगा। तो आपको इसे हल करने के लिए कुछ कोड काटना होगा।

देखें Sort a Map<Key, Value> by values (Java)

+4

इसकी कुंजी पर SortedMap आदेश –

+0

हाँ निष्पक्ष बिंदु +1 (संपादित मूल पोस्ट इस शामिल करने के लिए) – planetjones

0

HashMap आदेश दिया नहीं है।

SortedMap<String, String> map = new TreeMap<String, String>();

कृपया ध्यान दें - - Sorted Map provides a total ordering on its keys: आप एक TreeMap बजाय जो एक SortedMap लागू करता है का उपयोग करना चाहिए। आप नहीं कर सकते हैं यह मानों पर क्रमबद्ध है। यदि आप मानों को क्रमबद्ध करना चाहते हैं तो आप Map.entrySet() पर Comparable का उपयोग करके हमेशा ऐसा कर सकते हैं।

इसके अलावा इस बहुत समान प्रश्न पर एक नज़र डालें: TreeMap sort by value

+0

'' TreeMap' SortedMap', यह लागू करता है '' – skaffman

+0

@skaffman नहीं "द्वारा समर्थित" है - क्षमा करें। शब्दों की खराब पसंद। मैं इसे सही कर दूंगा। – CoolBeans

+0

-1: 'सॉर्ट किए गए मैप को चाबियों पर क्रमबद्ध किया गया है, मान नहीं। यह नहीं पूछा जाता है। –

4

आप मूल्यों चाबियों का स्वतंत्र तो आप नक्शे से बाहर मान लेते हैं और इसे से एक TreeSet निर्माण कर सकते हैं प्रदर्शित कर रहे हैं। फिर मूल्य क्रम में होगा।

TreeSet ordered = new TreeSet(map.values()); 

फिर

<#list ordered as v> 
    ${v} - 
</#list> 
+0

+1 - अच्छा विचार! – CoolBeans

+0

यदि आप सॉर्ट किए गए मान मॉडल में जोड़ सकते हैं, तो यह एक वैध उत्तर है। –

0

आप उम्मीद के मुताबिक क्रम में एक HashMap से अधिक यात्रा की जरूरत है, तो आप एक LinkedHashMap उम्मीद के मुताबिक यात्रा आदेश के साथ उपयोग कर सकते हैं, यह एक दोगुना से जुड़े सूची इसकी प्रविष्टियों के सभी के माध्यम से चल बनाए रखता है। मूल्यों के अनुक्रम के लिए sort builtin के उपयोग

<#list map?values?sort as v> 
    ${v} - 
</#list> 

नोटिस:

+0

-1: यह नहीं पूछा जाता है। –

+0

@Laurent, परिणाम प्राप्त करने के कई तरीके हैं, एक हैशपैप जो सम्मिलन आदेश को पुन: उत्पन्न करता है, जब आप टेम्पलेट विस्तार पर नियंत्रण रखना चाहते हैं तो बहुत उपयोगी हो सकता है। क्रमबद्ध क्रम केवल गैर-तुच्छ स्थितियों के लिए चला जाता है। – rsp

+0

सम्मिलन आदेश को संरक्षित करने वाला एक मानचित्र वास्तव में उपयोगी हो सकता है, लेकिन यह अभी भी नहीं पूछा गया है। ओपी पूछता है कि नक्शा के मूल्यों को कैसे क्रमबद्ध करें, न कि उनके सम्मिलन के आदेश को कैसे संरक्षित किया जाए। –

6

इस प्रयास करें।

+0

यह मेरे लिए बहुत अच्छा काम करता है। – Abel