最近做的项目有这样一个需求:要求对map中的值进行排序并生成序号。如果值相等则序号不变;如果不相等序号为该数数值在所有元素中的索引。如下表所示:
Key(String)
Value(Float)
Idx
23
12.4
1
10
3.2
2
11
2.2
3
9
2.2
3
1
1.9
5
6
0.5
6
public static Integer getSort(Map hashMap, String string) {
// 转换
ArrayList> arrayList = new ArrayList>(
hashMap.entrySet());
// 排序
Collections.sort(arrayList, new Comparator>() {
public int compare(Map.Entry map1,
Map.Entry map2) {
return ((map2.getValue() - map1.getValue() == 0) ? 0 : (map2
.getValue()
- map1.getValue() > 0) ? 1 : -1);
}
});
Map idxex = new HashMap();
// 输出
int size = 1;
for (int i = 0; i < arrayList.size(); i++) {
Entry entry = arrayList.get(i);
if (i > 0) {
float curr = arrayList.get(i).getValue();
float last = arrayList.get(i - 1).getValue();
if (curr != last) {
size = i;
idxex.put(entry.getKey(), (i + 1));
size++;
} else {
idxex.put(entry.getKey(), size);
}
} else {
idxex.put(entry.getKey(), size);
}
}
for (Map.Entry entry : idxex.entrySet()) {
String key = entry.getKey();
if (string.equals(key)) {
return entry.getValue();
}
}
return 0;
}