【问题标题】:Android: How can i sort HashMap by values from two sources?Android:如何按来自两个来源的值对 HashMap 进行排序?
【发布时间】:2016-04-27 14:12:12
【问题描述】:

我根据默认浏览器和谷歌浏览器的日期、名称和网址创建了一条记录。我结合两个浏览器的历史信息,并使用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();
        }
    }

【问题讨论】:

    标签: android sorting hashmap browser-history


    【解决方案1】:

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

    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 列表/数组 然后调用函数进行排序 => Arrays.sort(yourMyItemsObject, MyItem.sortByTitle);

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

    【讨论】:

      【解决方案2】:

      使用Inner class概念对hash map进行排序,不要使用两个hash map,

      先对类级别的hash map进行排序,再对hash值进行排序,这样在同一个hash map中就可以得到两个排序后的值

      【讨论】:

      • 内部类概念?
      【解决方案3】:

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

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

      祝你好运

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 2014-05-22
        相关资源
        最近更新 更多