簡體   English   中英

無法排序ArrayList <HashMap<String, Object> &gt;通過Java Android中的單個HashMap對象字段

[英]Unable to Sort ArrayList<HashMap<String, Object>> by Single HashMap object field in Java Android

我正在將數據添加到ArrayList <HashMap <String,Object >> contactList;

我想按他們的單個字段對contactList進行排序。

我正在添加這樣的數據:

HashMap<String, Object> docs = new HashMap<>();
                        docs.put("name", key);
                        docs.put("speciality", speci);
                        docs.put("status", status);  // sort by this field , if contains online it should appear first .
                        docs.put("picture", bp);
                        docs.put("education", educate);
                        docs.put("experience", experi);
                        docs.put("rating", ft);
                        contactList.add(docs);

數據被添加到循環中,之后我將contactList分配給simpleAdapter進行listview。

現在,我希望我的聯系人列表比較“狀態”字段,如果狀態為“聯機”,則首先顯示;或者,如果所有狀態為脫機,則什么也不顯示;

我如何對我的數據進行排序,我稍后需要在listView中使用此數據,以便首先在listview中顯示在線狀態聯系人。 任何幫助,將不勝感激。 謝謝

在此處輸入圖片說明

您可以通過anonymous inner class定義一個比較器,並根據status字段的值進行排序(假設它始終是String ,例如:

contactList.sort(new Comparator<Map<String, Object>>() {
    @Override
    public int compare(Map<String, Object> o1, Map<String, Object> o2) {
        if(null != o1.get("status") && null != o1.get("status")){
            return o2.get("status").toString().compareTo(o1.get("status").toString());
        }else if(null != o1.get("status")){
            return 1;
        }else{
            return -1;
        }
    }
});

更新資料

如果list.sort與當前API版本不兼容,則可以使用Collections.sort ,例如:

Collections.sort(contactList, new Comparator<Map<String, Object>>() {
        @Override
        public int compare(Map<String, Object> o1, Map<String, Object> o2) {
            if(null != o1.get("status") && null != o1.get("status")){
                return o2.get("status").toString().compareTo(o1.get("status").toString());
            }else if(null != o1.get("status")){
                return 1;
            }else{
                return -1;
            }
        }
    });

ArrayList 之謎<object>在 HashMap<div id="text_translate"><p> 我只是在運行下面的代碼,我對結果感到驚訝。 有人可以解釋一下這里發生了什么嗎? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在這里做錯了什么,請告訴我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object>

[英]Mystery with ArrayList<Object> in a HashMap

暫無
暫無

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

相關問題 數組列表 <HashMap<String,String> &gt;到JSON對象Java java:存儲HashMap <String, String> 在ArrayList中 <Object> 如何正確結合Hashmap <String, ArrayList<Object> &gt;和HashMap <String, Object> 如何從ArrayList中刪除dulpicates <HashMap<String,Object> &gt;在Java中? Java HashMap <String, ArrayList<Object[]> &gt;如何添加一個空數組? 要轉換ArrayList <HashMap<String, Object> &gt;串 可序列化的對象到Hashmap的Arraylist ArrayList 之謎<object>在 HashMap<div id="text_translate"><p> 我只是在運行下面的代碼,我對結果感到驚訝。 有人可以解釋一下這里發生了什么嗎? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在這里做錯了什么,請告訴我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object> 如何使用 stream 過濾器獲取 hashmap 列表? ArrayList <hashmap<string, object> &gt; </hashmap<string,> 將Java字符串轉換為HashMap對象
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM