我有一种格式为Map<String, Map<Integer, Long>>
的地图
和类似
{BCD={321=2}, ABC={123=1}, DEF={798=3}, CDE={564=1, 456=1}, GHI={908=2}}`
是否可以将Long
的值反向排序,然后排序String
和Integer
?
答案 0 :(得分:1)
不。
您无法对Map
的内容进行排序。
仅对保留排序的事物(例如List
,TreeMap
或TreeSet
)进行排序。
如果您希望对Map
的内容进行排序,只需实现一个Comparator
(例如Comparator<Map.Entry<String, Map<Integer, Long>>>
),它可以返回表示两个条目顺序的整数并提供所有内容将您的Map
放入List<Map.Entry<String, Map<Integer, Long>>>
中,然后可以对其进行排序。
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;
}
}
最困难的部分是正确实现比较器...