반응형
HashMap은 순서 보장이 안된다.
그러니까 1 2 3 4 순서로 데이터를 넣었는데 호출한 순서가 1 2 3 4 로 나오지 않을 수도 있다는 뜻이다.
(왜 니 맘대로 저장하는거여)
그래서 데이터 값을 기준으로 정렬하는 함수를 만들었으니 필요하시면 갖다 쓰시면 됨니다.
public static Map<String, Integer> sortHashMapByValue(Map<String, Integer> unsortMap, boolean orderDESC) {
List<String> mapKeys = new ArrayList<>(unsortMap.keySet());
List<Integer> mapValues = new ArrayList<>(unsortMap.values());
Collections.sort(mapValues);
Collections.sort(mapKeys);
LinkedHashMap<String, Integer> sortedMap =
new LinkedHashMap<>();
for (int val : mapValues) {
Iterator<String> keyIt = mapKeys.iterator();
while (keyIt.hasNext()) {
String key = keyIt.next();
int comp1 = unsortMap.get(key);
int comp2 = val;
if (comp1 == comp2) {
keyIt.remove();
sortedMap.put(key, val);
break;
}
}
}
if (orderDESC) { // 내림차순으로 할거면 true
List<String> reverseOrderedKeys = new ArrayList<String>(sortedMap.keySet());
Collections.reverse(reverseOrderedKeys);
LinkedHashMap<String, Integer> reversedMap = new LinkedHashMap<>();
for (String key : reverseOrderedKeys) {
reversedMap.put(key, sortedMap.get(key));
}
return reversedMap;
}
return sortedMap;
}
참고로 전 HashMap<String, Integer>을
key : 사용자 아이디
value : 점수
형태로 썼고 점수를 기준으로 등수를 매기려고 사용했음다!
반응형