我有一个数组列表,其中包含带有几个键/值对的哈希图。其中一个键/值对包含键“Order”,值是一个 int。请问如何根据它包含的哈希图的“顺序”键对数组列表进行排序?(我可以为字符串值而不是 int 值)
问问题
1458 次
3 回答
4
这样的事情会做到这一点:
List<Map<String, Integer>> list = new ArrayList<Map<String, Integer>>();
Collections.sort(list, new Comparator<Map<String, Integer>>() {
final static String COMPARE_KEY = "Order";
@Override
public int compare(Map<String, Integer> lhs, Map<String, Integer> rhs) {
Integer v1 = lhs.get(COMPARE_KEY);
Integer v2 = rhs.get(COMPARE_KEY);
return v1 < v2 ? -1 : v1 > v2 ? 1 : 0;
}
});
于 2013-07-24T10:00:28.627 回答
0
我能想到的一种方法是将 as 保留HashMap
为某个自定义类的属性并创建List
as List<CustomClass>
。然后,您可以让您的CustomClass
实施Comparable
或有一个Comparator
用于此自定义排序。在这种情况下排序会更容易。
或者定义Comparator
比较两个Map
对象的 a 并在Collections.sort()
.
public class MyCustomComparator implements Comparator<Map <String, Integer>>
{
@Override
public int compare (Map<String, Integer> o1, Map<String, Integer> o2)
{
return o1.get("Order").compareTo(o2.get("Order"));
}
}
于 2013-07-24T09:59:48.993 回答
-1
您需要一个自定义比较器,例如:
public class MyComparator implements Comparator<HashMap<String, ?>> {
public compare(HashMap<String, ?> o1, HashMap<String, ?> o2) {
return o1.get("Order").toString().compareTo(o2.get("Order").toString());
}
}
然后,您使用以下命令对列表进行排序:
Collections.sort(myList, new MyComparator());
于 2013-07-24T10:00:45.067 回答