lots of exercises in java... from https://github.com/exercism/java

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import java.util.Collections;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. class ParallelLetterFrequency {
  5. private static Map<Integer, Integer> letterFrequencyMap;
  6. private final String NOT_A_LETTER = "\\P{L}+";
  7. ParallelLetterFrequency(String letters) {
  8. letterFrequencyMap = getMapFromLetters(letters.toLowerCase().replaceAll(NOT_A_LETTER, ""));
  9. }
  10. Map<Integer, Integer> getMapFromLetters(String letters) {
  11. return letters
  12. .chars()
  13. .parallel()
  14. .collect(Counts::new, Counts::increment, Counts::combine)
  15. .buildMap();
  16. }
  17. private static class Counts {
  18. private Map<Integer, Integer> letterCounts = new HashMap<>();
  19. private void increment(int letter) {
  20. letterCounts.put(letter, letterCounts.getOrDefault(letter, 0) + 1);
  21. }
  22. private void combine(Counts other) {
  23. other.letterCounts.keySet()
  24. .forEach(letter -> letterCounts.merge(letter, other.letterCounts.get(letter), Integer::sum));
  25. }
  26. private Map<Integer, Integer> buildMap() {
  27. return Collections.unmodifiableMap(letterCounts);
  28. }
  29. }
  30. Map<Integer, Integer> letterCounts() {
  31. return letterFrequencyMap;
  32. }
  33. }