2014-07-04 38 views
-2

我無法通過應用程序應用排序機制。如何使用對象值對HashMap <String,Object>進行排序

原因有時排序是不準確的,並且在java中的比較器的東西仍然不清楚,但我已經使用排序在這裏和那裏。

現在,目前的問題如下。

我已經

HashMap<String, ModelX.ContactModel> unsortedModelContacts = 
new HashMap<String,ModelX.ContactModel>(contacts.size()); 

之後,我fached contactlist和使用for環路我已經把值如下:

unsortedModelContacts.put(stringvalue, modelContact); 
//object having name , and other details 

我如何排序unsortedModelContacts排序modelContact.getName財產?

+0

'HashMap'不是排序映射。所以你不能。使用'SortedMap'實現。 – awksp

+0

你想基於Map值而不是鍵進行排序嗎? –

+0

嘿傢伙,那爲什麼我問它不清楚我這樣做...我使用hashmap只是爲了收集目的... – danielad

回答

1
SortedMap<String,ModelX.ContactModel> sortedModelContacts = new TreeMap<>(); 

for(ModelX.ContactModel modelContact: contactlist){ // same list as before 
    sortedModelContacts.put(modelContact.getName(), modelContact); 
} 

您現在可以按名稱屬性的排序順序訪問此映射的條目。

注意:這裏假定名稱是唯一的。如果不是這樣,您將不得不使用多圖或

Map<String,ModelX.Set<ContactModel>> 

並相應地修改put和其他訪問。

+0

Thankyou先生,未知類SortedMap和沒有進口已顯示我使用1.6 java – danielad

+0

'java.util.SortedMap'是一個接口。自從JDK 1.2以來,它一直存在。這個映射的一個實現是'java.util.TreeMap'。 –

+0

@SyamS謝謝,修正。 – laune

1

如果您的地圖的關鍵字與名稱字段不同,那麼您可以考慮使用此方法。編寫單獨的比較器

import java.util.Collections; 
import java.util.Comparator; 
import java.util.HashMap; 
import java.util.LinkedHashMap; 
import java.util.LinkedList; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 

import sample.ModelX.ContactModel; 


public class SortMapSample { 
    public static void main(String[] args) throws Exception { 
     Map<String, ModelX.ContactModel> unsortedModelContacts = new HashMap<String,ModelX.ContactModel>(10); 

     unsortedModelContacts.put("1", new ModelX.ContactModel("James")); 
     unsortedModelContacts.put("2", new ModelX.ContactModel("Mary")); 
     unsortedModelContacts.put("3", new ModelX.ContactModel("John")); 
     unsortedModelContacts.put("4", new ModelX.ContactModel("Amanda")); 
     unsortedModelContacts.put("5", new ModelX.ContactModel("Charles")); 

     System.out.println(sortMap(unsortedModelContacts)); 
    } 

    private static Map<String, ModelX.ContactModel> sortMap(
      Map<String, ModelX.ContactModel> unsortedMap) { 

     List<Entry<String, ModelX.ContactModel>> list = new LinkedList<Entry<String, ModelX.ContactModel>>(
       unsortedMap.entrySet()); 

     Collections.sort(list, 
       new Comparator<Entry<String, ModelX.ContactModel>>() { 

        @Override 
        public int compare(Entry<String, ContactModel> o1, 
          Entry<String, ContactModel> o2) { 
         return o1.getValue().getName().compareTo(o2.getValue().getName()); 
        } 
       }); 

     Map<String, ModelX.ContactModel> sortedMap = new LinkedHashMap<String, ModelX.ContactModel>(); 
     for(Entry<String, ModelX.ContactModel> item : list){ 
      sortedMap.put(item.getKey(), item.getValue()); 
     } 
     return sortedMap; 
    } 

} 
+0

我apprecaited它...我會測試結果,讓你知道爵士 – danielad

相關問題