对HashMap进行排序

use*_*022 4 java

我有一个ArrayListHashMap.每个都HashMap包含许多键值对.我想按照ArrayListdistance中的值排序HashMap.

ArrayList<HashMap<String, String>> arrayListHashMap = 
    new ArrayList<HashMap<String, String>>();

{
    HashMap hashMap = new HashMap<String, Object>();
    hashMap.put("key", "A key");
    hashMap.put("value", "B value");
    hashMap.put("distance", 2536);

    arrayListHashMap.add(hashMap);
}

{
    HashMap hashMap = new HashMap<String, String>();
    hashMap.put("key", "B key");
    hashMap.put("value", "A value");
    hashMap.put("distance", 2539);
    arrayListHashMap.add(hashMap);
}
Run Code Online (Sandbox Code Playgroud)

dac*_*cwe 8

将所有HashMaps 添加到列表中并使用如下自定义对其进行排序Comparator:

Collections.sort(arrayListHashMap, new Comparator<HashMap<String, Object>>() {
    @Override
    public int compare(HashMap<String, Object> o1, HashMap<String, Object> o2) {

        return ((Integer) o1.get("distance")).compareTo(
                   (Integer) o2.get("distance"));
    }
});
Run Code Online (Sandbox Code Playgroud)

完整示例:

public static void main(String... args) {

    List<HashMap<String, Object>> arrayListHashMap = 
        new ArrayList<HashMap<String, Object>>();

    {
        HashMap<String, Object> hashMap = new HashMap<String, Object>();
        hashMap.put("key", "A key");
        hashMap.put("value", "B value");
        hashMap.put("distance", 2536);

        arrayListHashMap.add(hashMap);
    }

    {
        HashMap<String, Object> hashMap = new HashMap<String, Object>();
        hashMap.put("key", "B key");
        hashMap.put("value", "A value");
        hashMap.put("distance", 2539);
        arrayListHashMap.add(hashMap);
    }

    Collections.sort(arrayListHashMap, 
        new Comparator<HashMap<String, Object>>() {
        @Override
        public int compare(
                HashMap<String, Object> o1,
                HashMap<String, Object> o2) {

            return ((Integer) o1.get("distance")).compareTo(
                       (Integer) o2.get("distance"));
        }
    });


    System.out.println(arrayListHashMap);
}
Run Code Online (Sandbox Code Playgroud)

  • 通过`i1-i2`比较整数时要小心.试想其中一个是"Integer.MAX_VALUE". (3认同)

How*_*ard 6

您可以尝试使用自定义比较器进行排序:

Collections.sort(arrayListHashMap, new Comparator<HashMap<String, String>>() {

    @Override
    public int compare(HashMap<String, String> m1, HashMap<String, String> m2) {
        return Integer.valueOf(m1.get("distance")).compareTo(Integer.valueOf(m2.get("distance")));
    }
});
Run Code Online (Sandbox Code Playgroud)

请注意,我假设您的所有值都是字符串,而您的示例中并非如此(distance是一个int值).