I am trying to use the TreeMap
to sort my keys, which are being stored in the Map<String,Integer>
. But for some reason, the keys are not arranged correctly in decreasing order, as intended. I would like to know if there is a default way to achieve the intended order of the keys or I need to write some custom method to achieve this?
Following is the sample code I have:
public class ApplicationMain {
public static void main(String[] args) {
final Map<String, Integer> sampleTreeMap = new TreeMap<>();
sampleTreeMap.put("5903766131", 6);
sampleTreeMap.put("5903767", 7);
sampleTreeMap.put("590376614", 5);
sampleTreeMap.put("5903766170", 9);
sampleTreeMap.put("59037662", 12);
sampleTreeMap.put("5903766410", 10);
sampleTreeMap.entrySet().stream().forEach(entry ->{
System.out.println("Key : " + entry.getKey() + " -- " + entry.getValue());
});
}
}
The following is the output I am getting:
Key : 5903766131 -- 6
Key : 590376614 -- 5
Key : 5903766170 -- 9
Key : 59037662 -- 12
Key : 5903766410 -- 10
Key : 5903767 -- 7
I would like the output to be in descending order of the keys, so a larger number with a higher number of digits or characters would appear at the top, then a lower number with fewer digits. Something like this:
Key : 5903766410 -- 10
Key : 5903766170 -- 9
Key : 5903766131 -- 6
Key : 590376614 -- 5
Key : 59037662 -- 12
Key : 5903767 -- 7
Note:
I cannot change my data type to Integer or Long as this is coming from another application, and I would like to use it as a string in further processing, so I would like to find a way in which I can sort them properly.
I was previously using HashMap, but after discovering that it does not support ordering, I switched to TreeMap.
Please provide some suggestions on how to fix the issue.
It looks like you want to sort the keys as numbers instead of strings. One way to do this is to provide a custom Сomparator
when creating the map.
final Map<String, Integer> sampleTreeMap =
new TreeMap<>((Comparator.comparingLong((String s) -> Long.parseLong(s))).reversed());
P.S. You might find it helpful to read this question Comparator .comparing().reversed() strange behaviour / not working as expected