在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进行排序 – 这是不会发生的。 HashMapMap的未排序实现。 而且, 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; }