使用流计算字符串中字符的出现次数

Grz*_*yla 2 java lambda java-stream

我试图理解 Java 中流的数据流。我的任务是将每个字母出现在字符串列表中

List<String> words = Arrays.asList("Welcome", "to", "the", "java", "world");
Run Code Online (Sandbox Code Playgroud)

进入

Map<String, Long>
Run Code Online (Sandbox Code Playgroud)

使用单线流。

我知道,首先我们可以从列表中流式传输每个单词,然后我需要将它分成多个字符,然后将每个字符作为键并将其出现作为值进行计数,最后返回整个映射。

理解起来太复杂了。有人可以向我解释怎么做吗?

Nam*_*man 5

正如 Willis 指出的那样,可以使用flatMapandgroupingBy收集器来完成。但是,预期的输出类型应该是Map<Character, Long>这样的:

Map<Character, Long> charFrequency = words.stream() //Stream<String>
        .flatMap(a -> a.chars().mapToObj(c -> (char) c)) // Stream<Character>
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)