값에 따른 TreeMap 정렬
Java의 TreeMap으로 작업할 때 키의 기본 자연 순서에 따른 정렬이 항상 충분하지 않을 수 있습니다. 이 기사에서는 해당 값을 기준으로 TreeMap을 정렬하는 대체 접근 방식을 탐색합니다.
문제 설명:
귀하가 TreeMap을 정렬할 수 있는 비교기를 설계하는 방법을 찾고 있습니다. 기본 키 순서 대신 해당 값을 기준으로 하는 TreeMap입니다. 초기 시도에서 오류가 반환되어 Map.Entry를 비교기에 전달하는 것에 대한 질문이 표시되었습니다.
해결책:
TreeMap을 값별로 직접 정렬할 수는 없지만, 이 작업을 수행하기 위해 외부 컬렉션을 사용하는 것이 가능합니다. Map.entrySet()을 추출하면 사용자 정의 비교기를 사용하여 해당 값을 기준으로 항목을 정렬할 수 있습니다.
제공된 일반 메소드인 EntrySortedByValues()는 Map.Entry 객체의 SortedSet을 생성하여 이를 수행합니다. . 이 메서드는 맵 값이 비교 가능해야 하며 값을 비교하여 항목을 결정하는 비교기를 적용합니다. 주문.
구현:
static <K, V extends Comparable<? super V>> SortedSet<Map.Entry<K, V>> entriesSortedByValues(Map<K, V> map) { SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<>( new Comparator<Map.Entry<K, V>>() { @Override public int compare(Map.Entry<K, V> e1, Map.Entry<K, V> e2) { int res = e1.getValue().compareTo(e2.getValue()); return res != 0 ? res : 1; // Handle equal values separately } } ); sortedEntries.addAll(map.entrySet()); return sortedEntries; }
사용:
Map<String, Integer> map = new TreeMap<>(); map.put("A", 3); map.put("B", 2); map.put("C", 1); System.out.println(map); // prints "{A=3, B=2, C=1}" System.out.println(entriesSortedByValues(map)); // prints "[C=1, B=2, A=3]"
경고:
정렬된 세트 수정 또는 그 안에 있는 Map.Entry는 원본 지도의 "보기"가 아니기 때문에 예상치 못한 결과를 초래할 수 있습니다. 또한 ==를 Integer 객체와 함께 사용하는 것에 주의하세요. 이는 값 동일성이 아닌 참조 동일성을 수행하기 때문입니다.
위 내용은 키 대신 값을 기준으로 Java TreeMap을 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!