> Java > java지도 시간 > Java HashMap을 해당 값을 기준으로 오름차순 및 내림차순으로 정렬하려면 어떻게 해야 합니까?

Java HashMap을 해당 값을 기준으로 오름차순 및 내림차순으로 정렬하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-03 05:24:09
원래의
902명이 탐색했습니다.

How can I sort a Java HashMap by its values in ascending and descending order?

값을 기준으로 HashMap 정렬

Java에서 HashMap은 정렬되지 않은 키-값 쌍 모음입니다. HashMap을 값별로 정렬하려면 HashMap 자체가 내장된 정렬 방법을 제공하지 않기 때문에 외부 정렬 알고리즘을 사용할 수 있습니다.

한 가지 일반적인 접근 방식은 HashMap을 연결된 목록으로 변환하는 것입니다. 항목을 선택하고 연결된 목록을 값별로 정렬한 다음 HashMap을 다시 작성하세요. 이 프로세스 중에 키-값 쌍이 연결된 상태를 유지하기 위해 원래 키-값 순서를 유지하면서 값을 비교하는 비교기를 사용합니다.

다음 코드 조각은 이 접근 방식을 보여줍니다.

import java.util.*;

public class HashMapSorting {
    private static final boolean ASC = true;
    private static final boolean DESC = false;

    public static void main(String[] args) {
        // Creating dummy unsorted HashMap
        HashMap<String, Integer> unsortedMap = new HashMap<>();
        unsortedMap.put("B", 55);
        unsortedMap.put("A", 80);
        unsortedMap.put("D", 20);
        unsortedMap.put("C", 70);

        System.out.println("Before sorting...");
        printMap(unsortedMap);

        System.out.println("After sorting ascending order...");
        Map<String, Integer> sortedMapAsc = sortByValue(unsortedMap, ASC);
        printMap(sortedMapAsc);

        System.out.println("After sorting descending order...");
        Map<String, Integer> sortedMapDesc = sortByValue(unsortedMap, DESC);
        printMap(sortedMapDesc);
    }

    private static <K extends Comparable<K>, V extends Comparable<V>> Map<K, V> sortByValue(Map<K, V> unsorted, final boolean order) {
        List<Map.Entry<K, V>> list = new LinkedList<>(unsorted.entrySet());

        list.sort((o1, o2) -> order
                ? o1.getValue().compareTo(o2.getValue()) == 0
                  ? o1.getKey().compareTo(o2.getKey())
                  : o1.getValue().compareTo(o2.getValue())
                : o2.getValue().compareTo(o1.getValue()) == 0
                  ? o2.getKey().compareTo(o1.getKey())
                  : o2.getValue().compareTo(o1.getValue()));
        return list.stream().collect(
                Collectors.toMap(
                        Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b, LinkedHashMap::new
                )
        );
    }

    private static void printMap(Map<String, Integer> map) {
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
    }
}
로그인 후 복사

이 코드는 원래 키-값을 유지하면서 값을 평가하는 비교기를 구현하여 오름차순 및 내림차순 정렬을 모두 보여줍니다. 관계.

위 내용은 Java HashMap을 해당 값을 기준으로 오름차순 및 내림차순으로 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿