gpt4 book ai didi

java - 如何按其值类的字段对 LinkedHashMap 进行排序?

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:08 25 4
gpt4 key购买 nike

我使用以下行对 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时,当average-o.average在-1和1之间的范围总是返回0。

一个解决方案是简单地将您的 compareTo 函数更改为:

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

关于java - 如何按其值类的字段对 LinkedHashMap 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1117553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com