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下部に配置することです。

使用する必要があることはわかっていますが、これまで使用し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

コンパレータは、実装する必要のある単なるインターフェイスであり、オーバーライドする必要のあるメソッドが1つだけ含まれています。

例えば:

    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

あなたはこのように試すことができます:

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 に答える