如何对Android中的HashMap<String,ArrayList>进行排序?

How to sort HashMap<String,ArrayList> in Android?

如何排序HashMap<String,ArrrayList<String>>?

我正在从 phone 个联系人中获取联系人姓名,例如:

"String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));"

并存入一个HashMap<String,ArrayList<String>>。但是我得到的所有联系人都是未排序的。

我可以知道如何按字母顺序对这些联系人进行排序,以便我可以按排序顺序显示列表视图吗?

您可以从已经排序的数据库中检索数据。只需使用

String orderBy =  ContactsContract.Contacts.DISPLAY_NAME + " DESC";

在您的查询中。之后,通常当你需要使用HashMap 并且已经对数据进行排序时,那么你使用HashMap + ArrayList。在 HashMap 中你保留普通的键值对,在 ArrayList 中你保留排序后的值(如果你已经排序过的数据,你在阅读时将它添加到 ArrayList 中,你不需要再次排序).

如果你需要对你的HashMap中的值ArrayList进行排序,你可以使用:

Collections.sort(yourArrayList);

使用下面的 class 并将数据列表传递给它。它会给你新的排序列表。

public class CompareApp implements Comparator<AppDetails> {

private List<AppDetails> apps = new ArrayList<AppDetails>();

Context context;

public CompareApp(String str,List<AppDetails> apps, Context context) {
    this.apps = apps;
    this.context = context;

    Collections.sort(this.apps, this);
}

@Override
public int compare(AppDetails lhs, AppDetails rhs) {
    // TODO Auto-generated method stub
    return lhs.label.toUpperCase().compareTo(rhs.label.toUpperCase());
}

}

我使用以下代码按字符串名称的升序获取联系人,如下所示:

public void getAllContacts(ContentResolver cr) {


        Cursor phones = cr.query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
                null, Phone.DISPLAY_NAME + " ASC");

        while (phones.moveToNext()) {
            String name = phones
                    .getString(phones
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String phoneNumber = phones
                    .getString(phones
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            name1.add(name);
            phno1.add(phoneNumber);
        } 


        phones.close();
    } 

Code for reference

希望这是你需要的。