How to sort out a TreeMap<String, Integer>?
我有一张地图:
我想按递减计数顺序对该映射进行排序;也就是说,最频繁的字母在第一行,最后一行输出表示最不频繁的字母。如果两个字母的频率相同,那么字母表中第一个字母必须出现在第一位。怎么做到的?
我试过比较器:
1 2 3 4 5 6 7 |
但是,不是这样,产出是:
1 2 3 4 | D 3 E 3 A 2 S 5 |
号
伙计们。。。以前发现的,根本没用。好的输出应该是:
1 2 3 4 | S 5 D 3 E 3 A 2 |
由于自然排序与您的排序愿望没有任何共同之处:
1 2 3 4 5 6 7 8 9 10 11 12 13 | List<Map.Entry<String, Integer>> entries = new ArrayList<>(m.entrieSet()); Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer >a, Map.Entry<String, Integer>b) { if (a.getValue() < b.getValue()) { // Descending values return 1; } else if (a.getValue() > b.getValue()) { return -1; } return -a.getKey().compareTo(b.getKey()); // Descending keys } }); |
号
你的比较器看起来不对劲-这应该会更好:
1 2 3 4 5 6 7 8 9 10 |