jam*_*mes 24 java sorting android
我有一个像这样创建的列表变量:
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);
Run Code Online (Sandbox Code Playgroud)
我list用来ListView通过扩展BaseAdapter和实现各种方法来显示结果.
我的问题:我需要list根据地图的键名按字母顺序排序
问题:list根据地图的键名,按字母顺序排序的简单方法是什么?
我似乎无法绕过这个.我已将每个名称从每个名称中提取Map到一个String数组中,并对其进行排序(Arrays.sort(strArray);).但这并没有保留每个中的其他数据Map,所以我不太确定如何保留其他映射值
JB *_*zet 39
以下代码完美无缺
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);
Run Code Online (Sandbox Code Playgroud)
但是您的地图可能应该是特定类的实例.
你应该实现一个Comparator<Map<String, String>>基本上从它传递的两个地图中提取"名称"值,然后比较它们.
然后用Collections.sort(list, comparator).
你确定Map<String, String>你的列表真的是最好的元素类型吗?也许你应该有另一个包含 a Map<String, String>但又有getName()方法的类?
@Test
public void testSortedMaps() {
Map<String, String> map1 = new HashMap<String, String>();
map1.put("name", "Josh");
Map<String, String> map2 = new HashMap<String, String>();
map2.put("name", "Anna");
Map<String, String> map3 = new HashMap<String, String>();
map3.put("name", "Bernie");
List<Map<String, String>> mapList = new ArrayList<Map<String, String>>();
mapList.add(map1);
mapList.add(map2);
mapList.add(map3);
Collections.sort(mapList, new Comparator<Map<String, String>>() {
public int compare(final Map<String, String> o1, final Map<String, String> o2) {
return o1.get("name").compareTo(o2.get("name"));
}
});
Assert.assertEquals("Anna", mapList.get(0).get("name"));
Assert.assertEquals("Bernie", mapList.get(1).get("name"));
Assert.assertEquals("Josh", mapList.get(2).get("name"));
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果你想利用 lamdas 并使其更容易阅读
List<Map<String,String>> results;
Comparator<Map<String,String>> sortByName = Comparator.comparing(x -> x.get("Name"));
public void doSomething(){
results.sort(sortByName)
}
Run Code Online (Sandbox Code Playgroud)