使用整数作为字符串</string,>对HashMap <string,string =“”>进行排序

时间:2013-04-15 06:49:22

标签: java android sorting arraylist hashmap

我正在尝试对我的HasMap ArrayList进行排序,因此我的listview按值排序,但我没有得到它。 基本上我有几个键,其中一个是“类型”,其中包含"1", "4", "3",....

等值

我想通过此键“类型”对列表进行排序,但我得到的是"1", "11", "2"而不是"1", "2", "11" ...

我正在尝试使用此代码对其进行排序:

Collections.sort(myList, new Comparator<HashMap<String, String>>() {
public int compare(HashMap<String, 
String> mapping1,HashMap<String, String> mapping2) {
return mapping1.get("type").compareTo(mapping2.get("type"));
    }
});

4 个答案:

答案 0 :(得分:5)

您的类型为String,这就是您获得"1", "11", "2"的原因。将该字符串转换为整数(Integer.valueOf())然后进行比较。

更改以下内容

mapping1.get("type").compareTo(mapping2.get("type"));

 Integer.valueOf(mapping1.get("type")).compareTo(Integer.valueOf(mapping2.get("type")));

注意:我没有编译上面的代码。

答案 1 :(得分:1)

&#34;类型&#34;的数据类型似乎是String。因此,排序"1", "11", "2"似乎正确。更改&#34;类型&#34;的数据类型Integer

OR

compare方法中比较&#34;类型&#34;的Integer.parseInt

答案 2 :(得分:0)

如果您如上所述,您希望混合使用StringInteger键,则需要在比较器中处理非整数值。

Collections.sort(myList, new Comparator<HashMap<String, String>>() {
    public int compare(HashMap<String, String> mapping1,
                       HashMap<String, String> mapping2) {
        String valueOne = mapping1.get("type");
        String valueTwo = mapping2.get("type");
        try {
            return Integer.valueOf(valueOne).compareTo(Integer.valueOf(valueTwo));
        } catch(NumberFormatException e) {
            return valueOne.compareTo(valueTwo);
        }
    }
});

(否则,密钥值应更改为Integer以避免其他开发人员的错误。)

答案 3 :(得分:0)

你可以这样做..

根据您的需要更改参数..

Set<Entry<String, Integer>> set = map.entrySet();
        List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
        Collections.sort( list, new Comparator<Map.Entry<String, Integer>>()
        {
            public int compare( Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2 )
            {
                return (o2.getValue()).compareTo( o1.getValue() );
            }
        } );
        for(Map.Entry<String, Integer> entry:list){
            System.out.println(entry.getKey()+" ==== "+entry.getValue());
        }