Java TreeMap 比较器

标签 java comparator treemap sortedmap

我需要一个 TreeMap 的比较器。我应该在我的 TreeMap 的构造函数中匿名写这个吗?我怎么能写我的比较器。目前,Java 不喜欢我的代码(我可以匿名这样做吗?):

SortedMap<String, Double> myMap = 
    new TreeMap<String, Double>(new Comparator<Entry<String, Double>>()
    {
        public int compare(Entry<String, Double> o1, Entry<String, Double> o2)
        {
            return o1.getValue().compareTo(o2.getValue());
        } 
    });
  1. 我可以匿名进行上述操作吗?
  2. 我还能怎么做?
  3. 我想按值而不是键对 myMap 进行排序

最佳答案

你不能排序 TreeMap关于值(value)观。

A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used You will need to provide comparator for Comparator<? super K> so your comparator should compare on keys.

要对值进行排序,您需要 SortedSet .使用

SortedSet<Map.Entry<String, Double>> sortedset = new TreeSet<Map.Entry<String, Double>>(
            new Comparator<Map.Entry<String, Double>>() {
                @Override
                public int compare(Map.Entry<String, Double> e1,
                        Map.Entry<String, Double> e2) {
                    return e1.getValue().compareTo(e2.getValue());
                }
            });

  sortedset.addAll(myMap.entrySet());

举个例子

    SortedMap<String, Double> myMap = new TreeMap<String, Double>();
    myMap.put("a", 10.0);
    myMap.put("b", 9.0);
    myMap.put("c", 11.0);
    myMap.put("d", 2.0);
    sortedset.addAll(myMap.entrySet());
    System.out.println(sortedset);

输出:

  [d=2.0, b=9.0, a=10.0, c=11.0]

关于Java TreeMap 比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12947088/

相关文章:

java - 如何仅将 GET_CONTENT 用于音频?

Java Selenium WebDriver - 如何在不使用 Remote WebDriver 的情况下设置 ScrollBehavior (elementScrollBehavior)?

java - 通过 int 字段的降序对列表进行排序,如果 int 字段相等则按字典顺序排序

java - Map.Entry<K,V> 的比较器

java - 如何保留带有键和集合列表的 map ?

java - 如何创建唯一 key 并使用它在 Firebase 中发送数据?

java - 我的循环用数字七、六次填充数组,为什么?

java - 使用另一个列表对一个列表进行排序。根据第二个列表交换项目

javascript - 在 Javascript Infovis Toolkit 树形图中显示特定深度的标签

javascript - D3JS Treemap 呈现但颜色不显示