对地图列表进行排序<字符串>

2022-09-01 13:49:42

我有一个列表变量,如下所示:

List<Map<String, String>> list = new ArrayList<Map<String, String>>();

在我的Android应用程序中,此列表被填充。

举个例子:

Map<String, String> map1 = new HashMap<String, String>();
map.put("name", "Josh");
...

Map<String, String> map2 = new HashMap<String, String>();
map.put("name", "Anna");
...

Map<String, String> map3 = new HashMap<String, String>();
map.put("name", "Bernie");
...

list.add(map1);
list.add(map2);
list.add(map3);

我使用通过扩展和实现各种方法来显示结果。listListViewBaseAdapter

我的问题:我需要根据地图的键按字母顺序排序list

问:根据地图的键按字母顺序排序的简单方法是什么?list

我似乎无法对此进行思考。我已将每个名称中的每个名称提取到一个数组中,并对其进行排序()。但这并不能保留每个中的其他数据,所以我不太确定如何保留其他映射值MapStringArrays.sort(strArray);Map


答案 1

以下代码完美运行

public Comparator<Map<String, String>> mapComparator = new Comparator<Map<String, String>>() {
    public int compare(Map<String, String> m1, Map<String, String> m2) {
        return m1.get("name").compareTo(m2.get("name"));
    }
}

Collections.sort(list, mapComparator);

但是,您的地图可能应该是特定类的实例。


答案 2

你应该实现一个,它基本上从它传递的两个映射中提取“name”值,并比较它们。Comparator<Map<String, String>>

然后使用 .Collections.sort(list, comparator)

你确定a真的是你的列表的最佳元素类型吗?也许你应该有另一个类,它包含一个,但也有一个方法?Map<String, String>Map<String, String>getName()


推荐