1

我有一张地图清单

List<Map<String, Object>> people = new ArrayList<Map<String,Object>>();

像这样被填充

map.put("firstName",John);
map.put("lastName",Smith);
map.put("type","1"); //type is either 1 or a 0

people.add(map);

在这个列表被填充之后,我想要对它做的就是让所有人都0在列表的顶部输入类型,并且所有人都1在底部输入类型。

我知道我需要使用 a Comparator,但我以前从未使用过,所以我不知道如何使用它或它是如何工作的。

有人可以帮我吗

4

4 回答 4

4

像这样

Collections.sort( people, new Comparator<Map<String, Object>>() {
    @Override
    public int compare( Map<String, Object> o1, Map<String, Object> o2 ) {
        return (Integer.parseInt((String)o1.get( "type" ))) - 
                (Integer.parseInt((String)o2.get( "type" )));
    }
} );

但是,有很多方法可以使这一点变得更好。如果您不能按照@Pshemo 的建议使用 Person 对象来表示地图,那么至少为您的 type 属性使用合理的数据类型。最好的是枚举:

public enum PersonType {
    TYPE_1, TYPE_2
}

然后比较更清晰,更快,更具可读性。

于 2013-03-26T14:58:39.597 回答
2

Comparator 只是一个需要实现的接口,它只包含一个需要重写的方法。

例如:

    List<Map<String, Object>> people = new ArrayList<Map<String,Object>>();

    Map<String, Object> map = new HashMap<String, Object>();
    map .put("firstName","John");
    map.put("lastName","Smith");
    map.put("type","1"); //type is either 1 or a 0

    people.add(map);

    Collections.sort(people, new Comparator<Map<String, Object>>() {
        @Override
        public int compare(Map<String, Object> o1, Map<String, Object> o2) {
            // you may compare your map here
            return 0;
        }
    });
于 2013-03-26T14:58:16.597 回答
2

尝试这个

 Collections.sort(people, new Comparator<Map<String, String>>() {

    @Override
    public int compare(Map<String, String> m1, Map<String, String> m2) {
        return m1.get("type").compareTo(m2.get("type"));
    }
});
于 2013-03-26T15:02:08.373 回答
1

You can try like this :

class ListByType 
{
    private static class MyComparator implements Comparator<HashMap<String,String>>
    {
        @Override
        public int compare(HashMap mp1 , HashMap mp2)
        {
            return ((String)(mp1.get("type")).compareTo((String)mp2.get("type"));
        }
    }
    public static void main(String[] args) 
    {
        List<Map<String, String>> people = new ArrayList<Map<String,String>>();
        HashMap<String,String> map = new HashMap<String,String>();
        map.put("firstName","John");
        map.put("lastName","Smith");
        map.put("type","1"); //type is either 1 or a 0
        people.add(map);
        /*...
        ..
        ...
        Add more maps here..
        */
        //Sort the list
        Collections.sort(people,new MyComparator());
    }
}
于 2013-03-26T15:03:34.347 回答