Comment trier une LinkedHashMap par sa valeur de la classe de terrain?
- Je utiliser les lignes suivantes pour trier une LinkedHashMap, mais pas tous les éléments sont triés, quelque chose de mal ?
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); }
}
Je vais avoir un moment difficile d'obtenir le passé de la convention de codage. 😉
Oui, tous les chapeaux rend difficile à lire.
Variables et les noms de méthode fixe..
Oui, tous les chapeaux rend difficile à lire.
Variables et les noms de méthode fixe..
OriginalL'auteur Frank | 2009-07-13
Vous devez vous connecter pour publier un commentaire.
Lorsque vous revenez de type int, la plage lors de moyenne-o.la moyenne est entre -1 et 1 renvoie toujours 0.
Une solution est tout simplement de changer votre compareTo fonction:
OriginalL'auteur CookieOfFortune
Vous êtes le tri des nombres à virgule flottante à l'aide de nombres entiers. Les entiers n'obtenez pas arrondis; ils ont tronqué. Aussi, compte tenu de la façon dont vous êtes en train de faire le tri, pensez à utiliser un TreeHashMap à la place.
(et juste pour pinailler, Java convention utilise des minuscules pour la méthode et des noms de variables)
TreeMap 😛 hehe, je suis bête
OriginalL'auteur aberrant80