如何排序HashMap 使用对象值

问题描述 投票:-2回答:2

我在通过我的应用程序应用排序机制时遇到了麻烦。

原因有时排序不准确,java中的比较器事情对我来说仍然不清楚,但我已经在这里和那里使用了排序。

现在,目前的问题如下。

我有

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

之后,我把contactlistfor循环使用,我把值放在如下:

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

我怎样才能对unsortedModelContacts排序modelContact.getName属性进行排序?

java sorting spring-mvc comparator
2个回答
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;
    }

}

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和其他访问。

© www.soinside.com 2019 - 2024. All rights reserved.