2009-07-13 5 views
5

次の行を使用してLinkedHashMapをソートしますが、すべての項目がソートされているわけではありません。LinkedHashMapをvalueクラスのフィールドでソートするにはどうすればよいですか?

LinkedHashMap<String,PatternData> statisticsMap; 
// fill in the map ... 

LinkedHashMap<String,PatternData> sortedStatisticsMap=new LinkedHashMap<String,PatternData>();  // Sort it by patternData's average 

ArrayList<PatternData> statisticsMapValues=new ArrayList<PatternData>(statisticsMap.values()); 
Collections.sort(statisticsMapValues,Collections.reverseOrder());    // Sorting it (in reverse order) 

patternData last_i=null; 
for (PatternData i : statisticsMapValues)          // Now, for each value 
{ 
    if (last_i==i) continue;               // Without dublicates 
    last_i=i; 

    for (String s : statisticsMap.keySet())           // Get all hash keys 
    if (statisticsMap.get(s)==i)             // Which have this value 
    { 
     sortedStatisticsMap.put(s,i); 
    } 
} 


class PatternData implements Comparable<PatternData> 
{ 
    float sum=0,average; 
    int totalCount=0; 
    Vector<String> records=new Vector<String>(); 

    public PatternData() { } 

    public void add(float data) 
    { 
    sum+=data; 
    totalCount++; 
    average=sum/totalCount; 
    } 

    public void add(float data,String record) 
    { 
    add(data); 
    records.add(record); 
    } 

    float getAverage() { return average; } 

    public int compareTo(patternData o) { return (int)(average-o.average); } 
} 
+1

私は、コーディング規約を過ぎて取得に苦労しています。 ;) – jsight

+0

そうです、すべての帽子は読みにくいです。 – aberrant80

+0

変数とメソッド名は固定されています。 –

答えて

7

あなたはint型、範囲を返すときの平均-o.averageの間で-1と1は常に0

一つの解決策は単純にあなたのcompareTo機能を変更されて返されます。

return Float.compare(average, o.average); 
+0

はい、あなたは簡潔であり、ポイントには、意図したとおりに動作します、ありがとう! – Frank

0

整数を使用して浮動小数点数をソートしています。整数は丸められません。それらは切り捨てられます。また、実際にソートを行っている方法を考えれば、代わりにTreeHashMapを使用することを検討してください。

(とちょうどnitpickする、Javaの規則は、メソッドや変数名に小文字を使用しています)

+0

TreeHashMap?それは暴言ではありませんか?マップは通常、ハッシュテーブル(HashMap)または赤黒のツリー(TreeMap)として実装されていますが、両方ではありません。 :-) –

+1

ツリーマップ:P hehe、silly me – aberrant80

関連する問題