如何排序哈希映射列表

时间:2010-03-03 16:28:30

标签: java collections

我有一个List HashMap,如下面的

ArrayList l = new ArrayList ();
HashMap m = new HashMap ();
m.add("site_code","AL");
m.add("site_name","Apple");
l.add(m);
m = new HashMap();
m.add("site_code","JL");
m.add("site_name","Cat");
l.add(m);
m = new HashMap();
m.add("site_code","PL");
m.add("site_name","Banana");
l.add(m)

我想根据listsite_name进行排序。所以最后它会被归类为。

Apple, Banana, Cat

我正在尝试这样的事情:

Collections.sort(l, new Comparator(){
           public int compare(HashMap one, HashMap two) {
              //what goes here?
           }
});

3 个答案:

答案 0 :(得分:11)

如果你使你的收藏品变得通用,它最终会看起来像这样:

Collections.sort(l, new Comparator<HashMap<String, String>>(){ 
        public int compare(HashMap<String, String> one, HashMap<String, String> two) { 
            return one.get("site_name").compareTo(two.get("site_name"));
        } 
});

如果因为你被困在1.4或更早版本的平台上而无法使用泛型,那么你必须将get转换为String

(另外,作为一种风格问题,我更倾向于将变量声明为ListMap而不是ArrayListHashMap。但这与变量无关问题。)

答案 1 :(得分:9)

我认为现在是思考重新设计的好时机。在您的示例中,您的所有对象看起来都具有相同的两个字段 - site_namesite_code。在这种情况下,为什么不定义自己的类而不是使用HashMap

public class Site implements Comparable<Site> {
    private String site_name;
    private String site_code;

    // getters and setters, equals, and hashCode

    public int compareTo(Site other) {
        return this.site_name.compareTo(other.getSiteName);
    }
}

然后你可以使用Collections.sort()

答案 2 :(得分:3)

类似的东西:

String codeOne = (String)one.get("site_code");
String codeTwo = (String)two.get("site_code");

return codeOne.compareTo(codeTwo);

我没有编译或测试过这个,但它应该是这样的。