如何排序的值类的字段LinkedHashMap中?
-
12-09-2019 - |
题
我用下面的行进行排序一的LinkedHashMap,但并不是所有的项目进行排序,什么错?
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); }
}
解决方案
当返回int,则范围时平均o.average是-1和1之间将总是返回0。
的一个解决方案被简单地改变你的compareTo功能为:
return Float.compare(average, o.average);
其他提示
您正在使用排序整数浮点数。整数没有得到圆;他们被截断。此外,由于你实际上在做排序的方式,可以考虑使用TreeHashMap代替。
(和刚挑剔,Java约定使用小写方法和变量名)
不隶属于 StackOverflow