Java按值排序HashMap
我有这个HashMap:
HashMap m
它基本上存储任何单词(String)及其频率(整数)。 以下代码按值排序HashMap:
public static Map sortByValue(Map map) { List<Map.Entry> list = new LinkedList<Map.Entry>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry>() { public int compare(Map.Entry m1, Map.Entry m2) { return (m2.getValue()).compareTo(m1.getValue()); } }); Map result = new LinkedHashMap(); for (Map.Entry entry : list) { result.put(entry.getKey(), entry.getValue()); } return result; }
现在情况已经改变,我有这个:
HashMap; class doc{ integer freq; HashMap; }
我如何按照与sortByValue相同的方法按值对HashMap进行排序?
你必须创建一个这样的自定义比较器:
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() { 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 + " "); } }
@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); }