在Hashmap 中对Object的值进行排序
我想按对象的值对Hashmap进行排序。 在这种情况下,按国家/地区代码。
KEY OBJECT String LoyaltyCountry - country name - country code - country loc
我的代码如下:
public static HashMap loyaltyCountrySortMap(HashMap loyaltyCountryMap) { if (loyaltyCountryMap != null) { List keys = new ArrayList(); keys.addAll(loyaltyCountryMap.keySet()); Collections.sort(keys, new Comparator() { public int compare(LoyaltyCountry o1, LoyaltyCountry o2) { return o1.getCountryName().compareTo(o2.getCountryName()); } }); } return loyaltyCountryMap; }
我该怎么做才能正确?
这是一个方法,它返回一个包含按其值排序的Map.Entry项的Set。
public static > SortedSet> entriesSortedByValues(Map map) { SortedSet> sortedEntries = new TreeSet>( new Comparator>() { @Override public int compare(Map.Entry e1, Map.Entry e2) { return e1.getValue().compareTo(e2.getValue()); } }); sortedEntries.addAll(map.entrySet()); return sortedEntries; }
创建一个Comparator
,获取Map.entrySet()
,将它放入List
并对其进行排序。
澄清:你说你想按值对HashMap
进行排序 – 这是不会发生的。 HashMap
是Map
的未排序实现。 而且, Map
的排序实现对键进行排序,所以即使是TreeMap
也无法帮助你。
你可以来到最近的地方(没有制作你自己的地图实现)会产生一个地图条目列表,这就是我上面介绍的方法。
你不能对HashMap
排序。
看起来您想要返回按国家/地区名称排序的地图值的有序列表。
对于该更改,您的方法的返回类型为List,例如
public static List loyaltyCountrySortMap( HashMap loyaltyCountryMap ) { if (loyaltyCountryMap != null) { List values = new ArrayList(); values.addAll(loyaltyCountryMap.values()); Collections.sort(values, new Comparator () { public int compare(LoyaltyCountry o1, LoyaltyCountry o2) { return o1.getCountryName().compareTo(o2.getCountryName()); } }); return values; } return null; }