I have a HashMap<Integer, Integer>
named “relevance” e.g {2: 3, 1: 3, 3: 3, 5: 4, 4: 4, 6: 3} and I want do DESC sorting by values.
Map<Integer, Integer> sortedRelevance = new LinkedHashMap<>(); relevance.entrySet() .stream() .sorted(Map.Entry.<Integer, Integer>comparingByValue(Comparator.reverseOrder())) .forEachOrdered(x -> sortedRelevance.put(x.getKey(), x.getValue()));
I get a hashmap {5: 4, 4: 4, 2: 3, 1: 3, 3: 3, 6: 3}. How can I sort ascending keys with the same values?
Advertisement
Answer
You can “chain” Comparators by adding calls to thenComparing
:
Map<Integer, Integer> sortedRelevance = new LinkedHashMap<>(); relevance.entrySet() .stream() .sorted(Map.Entry.<Integer, Integer> comparingByValue(Comparator.reverseOrder()) .thenComparing(Map.Entry.comparingByKey())) .forEachOrdered(x -> sortedRelevance.put(x.getKey(), x.getValue()));