我有一个包含以下键/值的TreeMap:
private ArrayList<TreeMap<String,String>> mList = new ArrayList<TreeMap<String,String>>();
TreeMap<String,String> item = new TreeMap<String,String>();
item.put("FirstName", strFirstName);
item.put("LastName", strLastName);
item.put("Country", strCountry);
mList.add( item );
如何在添加所有项目后,通过“LastName”键下存储的值对TreeMap进行排序?我希望TreeMap的格式与原始列表相同,但应用了上面提到的排序:
“詹姆斯”,“阿米什人”,“美国” “查尔斯”,“布伦特伍德”,“美国”我发现了一个类似的问题,关于通过'常规'Java中的值对TreeMap进行排序,但代码对我不起作用 - 我不知道是因为Android的特性还是我无法适应它符合我的需求: - /
谢谢,
尼克
答案 0 :(得分:4)
听起来你正试图对包含TreeMaps的 ArrayList 进行排序,对吗? 如果是这样,以下内容应符合您的需求:
Collections.sort(mList, new Comparator<TreeMap<String, String>>(){
public int compare(TreeMap<String, String> left, TreeMap<String, String> right) {
return left.get("LastName").compareTo(right.get("LastName"));
}
});
应该注意的是,使用TreeMap来包含名称/值对列表可能不是必需的 - 我只是创建一个类来保存值。
答案 1 :(得分:0)
我没有为Android编程,但我认为没有任何不同之处。 TreeMap总是排序,实际上如果它不能对它进行排序会抛出exception
。无论如何,因为你使用String,它们将按natural
顺序排序,这对于Comparable
类的String
的实际实现来说只是一个奇特的词,它只是按字母顺序排序。 / p>
如果您希望它以任何其他方式对其进行排序,则TreeMap
的构造函数会收到Comparator
,其中只有一种方法可以实现,compare
,在这里您可以指定所需的排序。
希望有所帮助。
答案 2 :(得分:0)
当键被比较时,按值对TreeMap进行排序是错误的。如果你想要一个排序的List使用TreeSet而不是TreeMap。