Java对map进行排序并生成序号
2024-10-18 23:32:35
最近做的项目有这样一个需求:要求对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<String, Float> hashMap, String string) {
// 转换
ArrayList<Entry<String, Float>> arrayList = new ArrayList<Map.Entry<String, Float>>(
hashMap.entrySet());
// 排序
Collections.sort(arrayList, new Comparator<Map.Entry<String, Float>>() {
public int compare(Map.Entry<String, Float> map1,
Map.Entry<String, Float> map2) {
return ((map2.getValue() - map1.getValue() == 0) ? 0 : (map2
.getValue()
- map1.getValue() > 0) ? 1 : -1);
}
});
Map<String, Integer> idxex = new HashMap<String, Integer>();
// 输出
int size = 1;
for (int i = 0; i < arrayList.size(); i++) {
Entry<String, Float> 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<String, Integer> entry : idxex.entrySet()) {
String key = entry.getKey();
if (string.equals(key)) {
return entry.getValue();
}
}
return 0;
}
最新文章
- 如何有效使用Project(1)——编制进度计划、保存基准
- 安装xampp无法设置默认时间的坑
- XML文件解析DOM解析和SAX解析
- java初探native
- 去除TFS版本控制信息
- uva 10014 Simple calculations
- zabbix 模版其实就是主机
- Eclipse验证码
- iOS开发之控制器创建与加载(生命周期)
- DDOS的攻击原理和如何防护网站和游戏恶意攻击
- 教你如何在Android 6.0上创建系统悬浮窗
- redis 系列6 数据结构之字典(下)
- SSH 安全加固
- No bean named &#39;dataSource&#39; is defined
- 【转载】ASP.NET MVC设置允许跨域访问
- mysql5.7 datetime 默认值为‘0000-00-00 00:00:00&#39;值无法创建问题解决
- c# 7.1 Async Main方法
- 雷林鹏分享:C# 方法
- 给rm命令设置别名防止误操作
- BeautifulSoup中查找元素 select() 和find()区别