1. 程式人生 > >利用Comparator根據多個Map中某個共同屬性的value值對其進行排序

利用Comparator根據多個Map中某個共同屬性的value值對其進行排序

最近在工作中遇到一個場景,需要對List<Map<String, String>>這樣的結構進行排序,完成此功能後感覺這是一個通用方法,故將此記錄下來,留待以後可能之使用。

其具體情景為,當下有一個List,其中Map結構均相似,且存在一共同屬性key-indicator,並要根據其對應的value大小,對此List進行排序,最終寫成方法如下,經檢測可完成相應需求。

private List<Map<String, String>> getSortData(String indicator, List<Map<String, String>> data) {
        class MapSort implements Comparator<Map<String, String>> {
            private String keyName = "";
            private MapSort(String keyName) {
                this.keyName = keyName;
            }
            public int compare(Map<String, String> mp1, Map<String, String> mp2) {
                Double d1 = Double.valueOf(mp1.get(this.keyName));
                Double d2 = Double.valueOf(mp2.get(this.keyName));
                return d1.compareTo(d2);
            }
        }
        MapSort mapSort = new MapSort(indicator);
        Collections.sort(data, mapSort);
        return data;
    }