Java對map進行排序並生成序號


最近做的項目有這樣一個需求:要求對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;
	}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM