I am trying to sort a map based on word frequency (i.e. based on meaning). For this, I have an overridden comparator and passed to TreeMap , but I get this strange output.
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); } }
Output:
Before sorting: {two=2, one=1, three=3, four=3} After sorting based on value:{one=1, two=2, three=3}
Expected Result:
{one=1, two=2, four=3,three=3}
source share