我正在尝试对我的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"));
}
});
答案 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)
如果您如上所述,您希望混合使用String
和Integer
键,则需要在比较器中处理非整数值。
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());
}