I am trying to sort a HashMap first by value (integer) then by key (string). The following method doesn't appear to be sorting the hashmap properly. Any ideas how to make it work properly ?
private static Map<String, Integer> sortHash(Map<String, Integer> map) {
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
// Sort list by integer values then by string keys
Collections.sort(list, (a, b) -> {
int cmp1 = a.getValue().compareTo(b.getValue());
if (cmp1 != 0)
return cmp1;
else
return a.getKey().compareTo(b.getKey());
});
Map<String, Integer> result = new HashMap<>();
for (Map.Entry<String, Integer> entry : list)
result.put(entry.getKey(), entry.getValue());
return result;
}
asked Nov 26, 2015 at 19:30
1 Answer 1
The issue is here:
Map<String, Integer> result = new HashMap<>();
Use LinkedHashMap
since this map will maintain the order of the addition of the key/value pairs.
answered Nov 26, 2015 at 19:32
lang-java
list.sort(Map.Entry.comparingByValue().thenComparing(Map.Entry.comparingByKey()))