我有一个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)
Run Code Online (Sandbox Code Playgroud)
我想list基于此排序site_name.所以最后它会被归类为.
Apple, Banana, Cat
Run Code Online (Sandbox Code Playgroud)
我正在尝试这样的事情:
Collections.sort(l, new Comparator(){
public int compare(HashMap one, HashMap two) {
//what goes here?
}
});
Run Code Online (Sandbox Code Playgroud)
Mic*_*ers 12
如果你使你的集合变得通用,它最终会看起来像这样:
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"));
}
});
Run Code Online (Sandbox Code Playgroud)
如果因为你被困在1.4或更早版本的平台上而无法使用泛型,那么你必须将其转换get为String.
(另外,作为一个风格问题,我宁愿声明变量List和Map,而不是ArrayList和HashMap.但是,这不相关的问题.)
我认为现在是思考重新设计的好时机.从您的示例中,看起来所有对象都具有相同的两个字段 - site_name和site_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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用Collections.sort().