【问题标题】:Java sort HashMap by value [duplicate]Java按值对HashMap进行排序[重复]
【发布时间】:2023-04-06 03:16:01
【问题描述】:

我有这个 HashMap:

HashMap<String, Integer> m

它基本上存储任何单词(字符串)及其频率(整数)。 以下代码按值对 HashMap 进行排序:

public static Map<String, Integer> sortByValue(Map<String, Integer> map) {
        List<Map.Entry<String, Integer>> list = new LinkedList<Map.Entry<String, Integer>>(map.entrySet());

        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {

            public int compare(Map.Entry<String, Integer> m1, Map.Entry<String, Integer> m2) {
                return (m2.getValue()).compareTo(m1.getValue());
            }
        });

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

现在情况发生了变化,我有这个:

HashMap<String, doc>;

class doc{
integer freq;
HashMap<String, Double>;
}

如何按照与 sortByValue 相同的方法按值对这个 HashMap 进行排序?

【问题讨论】:

    标签: java sorting hashmap


    【解决方案1】:

    @jackturky 而不是

    public int compare(String s1, String s2) {
        int c = s2.length() - s1.length();
        if (c == 0)
          c = s1.compareToIgnoreCase(s2);
        return c;
      }
    

    为什么不这样写(这当然是检查 null 和空字符串)

    public int compare(String s1, String s2) {
              return s1.compareToIgnoreCase(s2);
         }
    

    【讨论】:

      【解决方案2】:

      你必须像这样创建一个自定义比较器:

      import java.util.Comparator;
      import java.util.Arrays;
      
      public class Test {
        public static void main(String[] args) {
      String[] strings = {"Here", "are", "some", "sample", "strings", "to", "be", "sorted"};
      
      Arrays.sort(strings, new Comparator<String>() {
        public int compare(String s1, String s2) {
          int c = s2.length() - s1.length();
          if (c == 0)
            c = s1.compareToIgnoreCase(s2);
          return c;
        }
      });
      
      for (String s: strings)
        System.out.print(s + " ");
        }
      }
      

      【讨论】:

      • 呃,不过那不是 HashMap..
      猜你喜欢
      • 2011-12-28
      • 2018-06-06
      • 1970-01-01
      • 2011-05-08
      • 2017-09-22
      • 2015-02-13
      • 2012-09-26
      • 1970-01-01
      • 2010-10-21
      相关资源
      最近更新 更多