根据值对TreeMap进行排序?

时间:2011-08-01 20:52:32

标签: java android

我有一个包含以下键/值的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的格式与原始列表相同,但应用了上面提到的排序:

“詹姆斯”,“阿米什人”,“美国” “查尔斯”,“布伦特伍德”,“美国”
“杰克”,“康奈尔”,“美国”
“Amy”,“Dunn”,“USA”
“梅琳达”,“埃利斯”,“加拿大”

我发现了一个类似的问题,关于通过'常规'Java中的值对TreeMap进行排序,但代码对我不起作用 - 我不知道是因为Android的特性还是我无法适应它符合我的需求: - /

谢谢,
尼克

3 个答案:

答案 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。