Android:如何通过两个来源的值对HashMap进行排序?

时间:2016-01-21 11:00:49

标签: android sorting hashmap browser-history

我根据默认浏览器和Google Chrome浏览器中的日期,名称和网址创建了记录。我将基于两个浏览器的历史信息组合在一起,并使用Hashmap显示它。所以现在我想做的是我想按日期和名字进行排序。但是,由于我的知识,我在实施它时遇到了困难。任何建议和意见将不胜感激。提前谢谢。

//default browser
if (mCur.moveToFirst() && mCur.getCount() > 0) {
        int titleIdx = mCur.getColumnIndex(Browser.BookmarkColumns.TITLE);
        int urlIdx = mCur.getColumnIndex(Browser.BookmarkColumns.URL);
        int dateIdx = mCur.getColumnIndex(Browser.BookmarkColumns.DATE);

        while (mCur.isAfterLast() == false) {
            HashMap temp = new HashMap();
            temp.put(FIRST_COLUMN,getDate(mCur.getLong(dateIdx), "dd/MM/yyyy   HH:mm:ss      "));
            temp.put(SECOND_COLUMN, mCur.getString(titleIdx));
            temp.put(THIRD_COLUMN, mCur.getString(urlIdx));
            list.add(temp);
            mCur.moveToNext();
        }
    }
    //google chrome
    if (mCur2.moveToFirst() && mCur2.getCount() > 0) {
        int dateIdx2 = mCur2.getColumnIndex(Browser.BookmarkColumns.DATE);
        int titleIdx2 = mCur2.getColumnIndex(Browser.BookmarkColumns.TITLE);
        int urlIdx2 = mCur2.getColumnIndex(Browser.BookmarkColumns.URL);

        while (mCur2.isAfterLast() == false) {
            HashMap temp = new HashMap();
            temp.put(FIRST_COLUMN, getDate(mCur2.getLong(dateIdx2), "dd/MM/yyyy   HH:mm:ss      "));
            temp.put(SECOND_COLUMN, mCur2.getString(titleIdx2));
            temp.put(THIRD_COLUMN, mCur2.getString(urlIdx2));
            list.add(temp);
            mCur2.moveToNext();
        }
    }

3 个答案:

答案 0 :(得分:1)

使用如下排序比较器为您的数据创建一个Model类:

public class MyItem {
String title;
String url;
String date;

public MyItem(String title, String url, String date) {
    this.title = title;
    this.url = url;
    this.date = date;
}

public static Comparator<MyItem> sortByDate = new Comparator<MyItem>() {
    @Override
    public int compare(MyItem item1, MyItem item2) {
        return item1.date.compareTo(item2.date);
    }
};

public static Comparator<MyItem> sortByTitle = new Comparator<MyItem>() {
    @Override
    public int compare(MyItem item1, MyItem item2) {
        return item1.title.compareTo(item2.title);
    }
};

}

然后在您的代码中使用它 创建一个Myitems列表/数组 然后调用函数sort =&gt; Arrays.sort(yourMyItemsObject,MyItem.sortByTitle);

根据您的排序需要更改compare()方法的代码。

答案 1 :(得分:0)

使用Inner class概念对哈希映射进行排序,不要使用两个哈希映射,

首先对类级别的哈希映射进行排序,然后对哈希值进行排序,在此相同的哈希映射中,您将获得两个排序值

答案 2 :(得分:0)

查看Sortable HashMap-like data structure in Java?是否使用可排序的HashMap数据结构。

您需要将所有数据合并到一个Map对象中,然后在您想要向用户显示结果之前对其进行排序。

祝你好运