在值上排序树形图

时间:2012-12-14 18:33:26

标签: java

  

可能重复:
  How to sort a Map<Key, Value> on the values in Java?

我有treemap<Integer,Float>。如何在浮点数上对地图进行排序?

有什么快捷方式吗?或者我必须为地图编写比较器?

2 个答案:

答案 0 :(得分:5)

实际上,您无法(正确,可靠地)按值对Map实现进行排序。 (你可能会看到声称的实现是hackish,不可靠,并且行为非常奇怪 - 拒绝重复值,在尝试查看不在地图中的键时抛出异常,如果支持映射会变得无法恢复变更...)

相反,明确地对条目列表进行排序:

List<Map.Entry<Integer, Float>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Float>>() {
  public int compare(Map.Entry<Integer, Float> e1, Map.Entry<Integer, Float> e2){
    return e1.getValue().compareTo(e2.getValue());
  }
});

如果您愿意,可以将其放入LinkedHashMap

Map<Integer, Float> sortedMap = new LinkedHashMap<Integer, Float>();
for (Map.Entry<Integer, Float> entry : list) {
  sortedMap.put(entry.getKey(), entry.getValue());
}

答案 1 :(得分:2)

最简单的解决方案可能是使用LinkedHashMap,并按值对其进行排序。看到这个: How to sort a LinkedHashMap by its value class's field?