Sha256: a2d0a12e118e5c141e8ebf875960c15093e8930de78db4bbd939a1148ca1cab2

Contents?: true

Size: 1.27 KB

Versions: 103

Compression:

Stored size: 1.27 KB

Contents

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;


class ParallelLetterFrequency {

    private static Map<Integer, Integer> letterFrequencyMap;
    private final String NOT_A_LETTER = "\\P{L}+";


    ParallelLetterFrequency(String letters) {
        letterFrequencyMap = getMapFromLetters(letters.toLowerCase().replaceAll(NOT_A_LETTER, ""));
    }

    Map<Integer, Integer> getMapFromLetters(String letters) {
        return letters
                .chars()
                .parallel()
                .collect(Counts::new, Counts::increment, Counts::combine)
                .buildMap();
    }

    private static class Counts {

        private Map<Integer, Integer> letterCounts = new HashMap<>();

        private void increment(int letter) {
            letterCounts.put(letter, letterCounts.getOrDefault(letter, 0) + 1);
        }

        private void combine(Counts other) {
            other.letterCounts.keySet()
                    .forEach(letter -> letterCounts.merge(letter, other.letterCounts.get(letter), Integer::sum));
        }

        private Map<Integer, Integer> buildMap() {
            return Collections.unmodifiableMap(letterCounts);
        }
    }

    Map<Integer, Integer> letterCounts() {
        return letterFrequencyMap;
    }
}

Version data entries

103 entries across 103 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.179 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.178 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.177 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.176 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.175 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.174 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.173 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.172 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.171 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.170 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.169 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.167 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.166 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.165 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.164 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.163 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.162 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.161 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java
trackler-2.2.1.160 tracks/java/exercises/parallel-letter-frequency/.meta/src/reference/java/ParallelLetterFrequency.java