2010-03-02 33 views

回答

2

而答案是,我找到了here

public LinkedHashMap sortHashMapByValuesD(HashMap passedMap) { 
    List mapKeys = new ArrayList(passedMap.keySet()); 
    List mapValues = new ArrayList(passedMap.values()); 
    Collections.sort(mapValues); 
    Collections.sort(mapKeys); 

    LinkedHashMap sortedMap = 
     new LinkedHashMap(); 

    Iterator valueIt = mapValues.iterator(); 
    while (valueIt.hasNext()) { 
     Object val = valueIt.next(); 
     Iterator keyIt = mapKeys.iterator(); 

     while (keyIt.hasNext()) { 
      Object key = keyIt.next(); 
      String comp1 = passedMap.get(key).toString(); 
      String comp2 = val.toString(); 

      if (comp1.equals(comp2)){ 
       passedMap.remove(key); 
       mapKeys.remove(key); 
       sortedMap.put((String)key, (Double)val); 
       break; 
      } 
     } 
    } 

    return sortedMap; 
} 
+0

這對我有效..感謝分享:) – Sunny

+0

很高興知道它幫助了某人,@孫尼。 –

3

This是一種可以使用的不同方法。比較器中的compare()方法不會返回0。這將保持重複的條目。

1
public LinkedHashMap sortHashMapByValuesD(HashMap passedMap) { 
List mapKeys = new ArrayList(passedMap.keySet()); 
List mapValues = new ArrayList(passedMap.values()); 
Collections.sort(mapValues); 
Collections.sort(mapKeys); 

LinkedHashMap sortedMap = 
    new LinkedHashMap(); 

Iterator valueIt = mapValues.iterator(); 
while (valueIt.hasNext()) { 
    Object val = valueIt.next(); 
    Iterator keyIt = mapKeys.iterator(); 

    while (keyIt.hasNext()) { 
     Object key = keyIt.next(); 
     String comp1 = passedMap.get(key).toString(); 
     String comp2 = val.toString(); 

     if (comp1.equals(comp2)){ 
      passedMap.remove(key); 
      mapKeys.remove(key); 
      sortedMap.put((String)key, (Double)val); 
      break; 
     } 

    } 

} 
return sortedMap; 

}

相關問題