-1

我有一个数组列表,其中包含带有几个键/值对的哈希图。其中一个键/值对包含键“Order”,值是一个 int。请问如何根据它包含的哈希图的“顺序”键对数组列表进行排序?(我可以为字符串值而不是 int 值)

4

3 回答 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为某个自定义类的属性并创建Listas 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 回答