Skip to content

Latest commit

 

History

History
69 lines (56 loc) · 1.87 KB

File metadata and controls

69 lines (56 loc) · 1.87 KB

如何在 java 中按值对TreeMap进行排序

原文: https://beginnersbook.com/2014/07/how-to-sort-a-treemap-by-value-in-java/

TreeMap总是根据其键进行排序,但是如果你想根据它的值对它进行排序,那么你可以使用比较器来构建一个逻辑。下面是按值排序TreeMap的完整代码。

import java.util.*;

class TreeMapDemo {
  //Method for sorting the TreeMap based on values
  public static <K, V extends Comparable<V>> Map<K, V> 
    sortByValues(final Map<K, V> map) {
    Comparator<K> valueComparator = 
             new Comparator<K>() {
      public int compare(K k1, K k2) {
        int compare = 
              map.get(k1).compareTo(map.get(k2));
        if (compare == 0) 
          return 1;
        else 
          return compare;
      }
    };

    Map<K, V> sortedByValues = 
      new TreeMap<K, V>(valueComparator);
    sortedByValues.putAll(map);
    return sortedByValues;
  }
  public static void main(String args[]) {

    TreeMap<String, String> treemap = new TreeMap<String, String>();

    // Put elements to the map
    treemap.put("Key1", "Jack");
    treemap.put("Key2", "Rick");
    treemap.put("Key3", "Kate");
    treemap.put("Key4", "Tom");
    treemap.put("Key5", "Steve");

    // Calling the method sortByvalues
    Map sortedMap = sortByValues(treemap);

    // Get a set of the entries on the sorted map
    Set set = sortedMap.entrySet();

    // Get an iterator
    Iterator i = set.iterator();

    // Display elements
    while(i.hasNext()) {
      Map.Entry me = (Map.Entry)i.next();
      System.out.print(me.getKey() + ": ");
      System.out.println(me.getValue());
    }
  }
}

输出:

Key1: Jack
Key3: Kate
Key2: Rick
Key5: Steve
Key4: Tom