Java8对Map

时间:2019-06-27 11:57:57

标签: java sorting

我有一种格式为Map<String, Map<Integer, Long>>的地图 和类似

的内容
{BCD={321=2}, ABC={123=1}, DEF={798=3}, CDE={564=1, 456=1}, GHI={908=2}}`

是否可以将Long的值反向排序,然后排序StringInteger

1 个答案:

答案 0 :(得分:1)

不。 您无法对Map的内容进行排序。

仅对保留排序的事物(例如ListTreeMapTreeSet)进行排序。

如果您希望对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;
           }
}

最困难的部分是正确实现比较器...