首页 > 解决方案 > 在 Java 中反转嵌套的 TreeMap

问题描述

我有一个表格的 TreeMap

TreeMap<String, TreeMap<String, Integer>> map = new TreeMap<>();

其中包含一个roll_no、主题和标记。我想按学生的分数对学生进行排序,因此需要反转 TreeMap 并使其具有以下形式:

TreeMap <TreeMap<Integer, String>, String> reverseMap = new TreeMap<>(Collections.reverseOrder());

标签: javahashmaptreemap

解决方案


为什么不通过将特定comparator实例传递给TreeMap构造函数来简单地从一开始就反转比较器:

Map<String, Integer> map = new TreeMap<>(Collections.reverseOrder());
map.put("foo", 1);
map.put("bar", 2);
map.put("doe", 3);

System.out.println(map);

{foo=1, doe=3, bar=2}

当然,如果没有反向比较器:

{bar=2, doe=3, foo=1}

该解决方案不需要两张地图(原始地图和反向地图)。

如果你想要两者,那么使用putAll带有TreeMap反向比较器的 a :

Map<String, Integer> reversedMap = new TreeMap<>(Collections.reverseOrder());
reversedMap.putAll(map);

System.out.println(reversedMap);

请注意,我完全忽略了您的数据结构,因为这不合适,因此我保持设计简单以显示可以做什么。A MapofMap不是一个好主意。


推荐阅读