java - 在 Java 中反转嵌套的 TreeMap
问题描述
我有一个表格的 TreeMap
TreeMap<String, TreeMap<String, Integer>> map = new TreeMap<>();
其中包含一个roll_no、主题和标记。我想按学生的分数对学生进行排序,因此需要反转 TreeMap 并使其具有以下形式:
TreeMap <TreeMap<Integer, String>, String> reverseMap = new TreeMap<>(Collections.reverseOrder());
解决方案
为什么不通过将特定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 Map
ofMap
不是一个好主意。
推荐阅读
- c++ - 为什么在这里使用静态 char const* 而不是字符串文字会有所不同?
- json - 如何在不获取属性的笛卡尔积的情况下展平内部数组对象
- javascript - 如何自动更新 DIV?
- visual-studio - 如何在 Visual Studio 2019 中更新我的 IntelliCode 模型?
- ios - 关闭所有呈现的视图控制器 modalPresentationStyle = .custom
- python - Django Rest Framework 中 id 的迁移错误
- android - android自定义对话框标题不显示
- python - 通过 API 调用获取数据,该调用需要使用 Excel VBA 的凭据
- c - 有没有办法让我的 do-while 条件在间隔之间起作用?
- typescript - 在 TypeScript 中使用 AM/PM 的日期之间过滤对象数组