簡體   English   中英

我們如何在Android中對ArryMap進行排序

[英]How we can Sort ArryMap in Android

我在Activity中使用ArrayMap來存儲響應。 ArrayMap<String, PublicSpotData> publicSpotData ArrayMap將存儲索引以及鍵值對。 現在我在排序ArrayMap時遇到問題。 我想根據publicSpotData.getAt() (int)對ArrayMap進行排序。 我已經做到了。

List<Map.Entry<String, PublicSpotData>> entries = new ArrayList<>(); for (Map.Entry<String, PublicSpotData> entry : publicSpotData.entrySet()) { entries.add(entry); }

 Collections.sort(entries, new Comparator<Map.Entry<String, PublicSpotData>>() {
                @Override
                public int compare(Map.Entry<String, PublicSpotData> o1, Map.Entry<String, PublicSpotData> o2) {
                    return o2.getValue().getAt().compareTo(o1.getValue().getAt());
                }
            });

            for (Map.Entry<String, PublicSpotData> entry : entries)
                publicSpotData.put(entry.getKey(), entry.getValue());`

但這不能解決我的問題。 任何幫助,將不勝感激。

您可以使用Collections#sort 方法

Collections.sort(new ArrayList<>(c), aComparator);

c只是ArrayMap中的鍵集 ,而Comparator是比較器的自定義實現,用於對地圖中的圖元進行排序

您可以通過提供Comparator任何 Java集合進行排序。

換句話說:您必須創建一個知道如何比較兩個PublicSpotData對象的類; 然后將其與Collections.sort()一起使用

含義:只要您的“傳入”對象實現了Java集合接口之一(Android ArrayMap是一個Map,即一個集合); 您可以使用Java庫的默認方式對其進行排序。

但是,問題變得更加復雜:您只能對Lists進行排序。 您的輸入數據...表示為Map。 所以,讓我們一步一步走:

List<PublicSpotData> dataObjects = ... coming from somewhere
Collections.sort(dataObjects, new Comparator<PublicSpotData>() { ...
  here you put the comparator for that thing);

現在,您將獲得一個針對該條件排序的列表。

從這個意義上說: 真正的問題是您的模型不符合您的需求。 Map的本質是提供該映射功能。 你需要:

  • 提取數據對象列表
  • 排序那些
  • 循環排序列表; 並為每個條目找到對應的地圖鍵!

首先,ArrayMap隱式地對鍵進行排序。

基線:您需要迭代arrayMap以通過索引獲取Key。 然后通過該鍵調用值。

這是一個例子。 我列出了未排序輸入中的排序輸出。 然后我對keySet進行反向排序。

ArrayMap<String, String> arrayMap = new ArrayMap<>();
        arrayMap.put("AAA7", "BBB2");
        arrayMap.put("AAA8", "BBB1");
        arrayMap.put("AAA9", "BBB");
        arrayMap.put("AAA9", "BBB");// will override previous call

        String res = "";
        for (int i = 0; i < arrayMap.size(); i++) {
            String key = arrayMap.keyAt(i);
            res += arrayMap.get(key) + ", ";
        }

        Log.d(TAG, "normal output: " + res);

        // sorting array based on keys
        List<String> list = new ArrayList<>(arrayMap.keySet());
        java.util.Collections.reverse(list);//or you implement your own sort

        String res2 = "";
        for (String key : list) {
            res2 += arrayMap.get(key) + ", ";
        }

        Log.d(TAG, "output of sorted collection in reverse based on keys: " + res2);

為了提高效率,如果不需要像Iteration這樣的標准Java API,則可以使用SimpleArrayMap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM