I have a map in this format: Map<String, Map<Integer, Long>>
and content like
{BCD={321=2}, ABC={123=1}, DEF={798=3}, CDE={564=1, 456=1}, GHI={908=2}}`
Is it possible sort the Long value reverse, then String and Integer?
I have a map in this format: Map<String, Map<Integer, Long>>
and content like
{BCD={321=2}, ABC={123=1}, DEF={798=3}, CDE={564=1, 456=1}, GHI={908=2}}`
Is it possible sort the Long value reverse, then String and Integer?
No.
You cannot sort contents of a Map.
Sorting is only possible on things, which retain a sorting, like List, TreeMap or TreeSet.
If you want the Map contents to be sorted, just implement a Comparator (e.g. Comparator<Map.Entry<String, Map<Integer, Long>>>) which is capable of returning an integer representing the order of two entries and feed all contents of your Map into a List<Map.Entry<String, Map<Integer, Long>>>, which can then be sorted.
private static final Comparator<Map.Entry<String, Map<Integer, Long>>> COMPI = new Comparator<>() {
@Override
public int compare(Map.Entry<String, Map<Integer, Long>> obj1,
Map.Entry<String, Map<Integer, Long>>(obj2)) {
... return 0, if obj1 equal to obj2
... return 1, if obj1 lower than obj2
... return -1, if obj1 greater than obj2
}
public static List<Map.Entry<String, Map<Integer, Long>>> sortMyMap(Map<String, Map<Integer, Long>> myMap) {
List<Map.Entry<String, Map<Integer, Long>>> l = new java.util.ArrayList<>(myMap.entrySet());
Collections.sort(l, COMPI);
return l;
}
}
The most difficult part would be to implement the comparator correctly...
TreeMap maybe?SortedMap which sums up suchs maps, mainly consisting of TreeMap. Theres also LinkedHashMap which retains insertion order (but not general sorting).java.util.Map is not sortable per se, but only by transforming it somehow...