首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Map 依 Value 排序並回傳結果的完整實作

     編輯:Java 相關知識

核心程式碼

提供兩種方式實現 Map 依值排序:自訂 Comparator 搭配 TreeMap,以及通用泛型工具方法。

package com.zuidaima.util;

import java.util.*;

public class ValueComparator implements Comparator {
    Map base;
    public ValueComparator(Map base) { this.base = base; }

    @Override
    public int compare(Long a, Long b) {
        return Double.compare(base.get(b), base.get(a)); // 降序
    }

    // 通用泛型排序方法
    public static > Map sortByValues(final Map map) {
        Comparator valueComparator = (k1, k2) -> {
            int cmp = map.get(k2).compareTo(map.get(k1));
            return cmp == 0 ? 1 : cmp; // 避免值相等時鍵被視為重複
        };
        Map sorted = new TreeMap<>(valueComparator);
        sorted.putAll(map);
        return sorted;
    }

    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put(1L, 99.5);
        map.put(2L, 67.2);
        map.put(3L, 67.5);
        map.put(4L, 67.6);

        // 方式一:自訂 Comparator
        TreeMap sorted1 = new TreeMap<>(new ValueComparator(map));
        sorted1.putAll(map);
        System.out.println("results: " + sorted1);

        // 方式二:通用工具方法
        Map sorted2 = sortByValues(map);
        System.out.println("results2: " + sorted2);
    }
}

執行結果

unsorted map: {1=99.5, 2=67.2, 3=67.5, 4=67.6}
results: {1=99.5, 4=67.6, 3=67.5, 2=67.2}
results2: {1=99.5, 4=67.6, 3=67.5, 2=67.2}

關鍵點說明

  • TreeMap 依鍵排序,透過自訂 Comparator 讓鍵的比較邏輯委派給對應的值。
  • 比較器回傳 1 而非 0 當值相等時,確保不同鍵不會被視為重複而覆蓋。
  • 通用方法使用泛型 V extends Comparable,適用於任何可比較的值類型。
  • 若需依鍵排序,原理類似,只需調整比較器邏輯即可。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved