public class WordFrequency { public static String sentence = "one three two two three three four four four"; public static Map<String,Integer> map; public static void main(String[] args) { map = new HashMap<>(); String[] words = sentence.split("\\s"); for (String word : words) { Integer count = map.get(word); if (count == null) { count = 1; } else { ++count; } map.put(word,count); } Comparator<String> myComparator = new Comparator<String>() { @Override public int compare(String s1,String s2) { if (map.get(s1) < map.get(s2)) { return -1; } else if (map.get(s1) > map.get(s2)) { return 1; } else { return 0; } } }; SortedMap<String,Integer> sortedMap = new TreeMap<String,Integer>(myComparator); System.out.println("Before sorting: " + map); sortedMap.putAll(map); System.out.println("After Sorting based on value:" + sortedMap); } }
输出:
Before sorting: {two=2,one=1,three=3,four=3} After sorting based on value:{one=1,two=2,three=3}
预期产出:
{one=1,four=3,three=3}
解决方法
Note that the ordering maintained by a tree map,like any sorted map,and whether or not an explicit comparator is provided,must be consistent with equals if this sorted map is to correctly implement the Map interface. (See Comparable or Comparator for a precise deFinition of consistent with equals.) This is so because the Map interface is defined in terms of the equals operation,but a sorted map performs all key comparisons using its compareto (or compare) method,so two keys that are deemed equal by this method are,from the standpoint of the sorted map,equal. The behavior of a sorted map is well-defined even if its ordering is inconsistent with equals; it just fails to obey the general contract of the Map interface.
您可以通过在值相等时比较键来解决此问题:
Comparator<String> myComparator = new Comparator<String>() { @Override public int compare(String s1,String s2) { if (map.get(s1) < map.get(s2)) { return -1; } else if (map.get(s1) > map.get(s2)) { return 1; } else { return s1.compareto(s2); } } };
After sorting based on value:{one=1,three=3}
由于四个<三个基于字符串的自然顺序.
原文地址:https://www.jb51.cc/java/121360.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。