Advertisement
Guest User

Untitled

a guest
Feb 18th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. //Returns the letter with the most occurrences first
  2. public static char[] frequency(char[] letters) {
  3. Map<Character, Integer> frequency;
  4. Map<Character, Integer> sorted;
  5.  
  6. frequency = countOccurrences(letters);
  7. sorted = sortOnValue(frequency);
  8.  
  9. return keysToArray(sorted);
  10. }
  11.  
  12. //Checks if the HashMap contains the letter and add 1 to the count if it does, otherwise it adds the new letter
  13. private static Map<Character, Integer> countOccurrences(char[] letters) {
  14. Map<Character, Integer> frequency = new HashMap<>();
  15.  
  16. for (int i = 0; i < letters.length; i++) {
  17. if (frequency.containsKey(letters[i])) {
  18. frequency.replace(letters[i], (frequency.get(letters[i]) + 1));
  19. } else {
  20. frequency.put(letters[i], 1);
  21. }
  22. }
  23. return frequency;
  24. }
  25.  
  26. //Sorts the HashMap on the values, in descending order
  27. private static Map<Character, Integer> sortOnValue(Map<Character, Integer> frequency) {
  28. return frequency.entrySet().stream().sorted(Collections.reverseOrder(Map.Entry.comparingByValue())).collect(
  29. toMap(e -> e.getKey(), e -> e.getValue(), (e1, e2) -> e2,
  30. LinkedHashMap::new));
  31. }
  32.  
  33. //Turns the keys of the Character-HashMap into a char-array
  34. private static char[] keysToArray(Map<Character, Integer> sorted) {
  35. char[] result = new char[sorted.size()];
  36. int i = 0;
  37.  
  38. for (char key : sorted.keySet()) {
  39. result[i] = key;
  40. i++;
  41. }
  42. return result;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement