我有一个哈希地图列表,其中包含联系人姓名作为密钥,电话号码包含值,如下所示。
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phonenumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
//stored_Contacts.add(name);
// phone_number_list.add(phonenumber);
try {
hash_map_list = new ArrayList<HashMap<String, String>>();
map = new HashMap<String, String>();
map.put(name, phonenumber);
hash_map_list.add(map);
} catch (Exception e) {
e.printStackTrace();
}
}
cursor.close();
我需要的是,我想按字母顺序对联系人姓名进行排序,并保留值(电话号码)和联系人姓名。任何人都可以帮忙吗?
我尝试过这个功能,但没有工作。
private static Map<String, String> sortByComparator(Map<String, String> unsortMap, final boolean order)
{
List<Map.Entry<String, String>> list = new LinkedList<Map.Entry<String, String>>(unsortMap.entrySet());
// Sorting the list based on values
Collections.sort(list, new Comparator<Map.Entry<String, String>>()
{
public int compare(Map.Entry<String, String> o1,
Map.Entry<String, String> o2)
{
if (order)
{
return o1.getValue().compareTo(o2.getValue());
}
else
{
return o2.getValue().compareTo(o1.getValue());
}
}
});
Map<String, String> sortedMap = new LinkedHashMap<String, String>();
for (Map.Entry<String, String> entry : list)
{
sortedMap.put(entry.getKey(), entry.getValue());
}
return sortedMap;
}
答案 0 :(得分:2)
HashMap
并非设计为已排序的数据集。牺牲了这一点,以便在存储和检索值时尽可能高效。
另一方面,TreeMap
的设计方式使您的密钥始终排序。这看起来是适合您用例的工具。