느려요

진짜로

IT/Mobile

[Android/JAVA] HashMap을 value 기준으로 정렬하기

느이 2024. 1. 25. 16:01

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 : 점수

형태로 썼고 점수를 기준으로 등수를 매기려고 사용했음다!

반응형