如何将Stream<String>转为Stream<Character>并实现文件字母频率统计
我现在有个需求:读取文件并统计每个字母的出现频率,大写字母需要转换为小写后再进行统计。
我手里有一段用来统计文件单词频率的示例代码,想基于它修改实现字母统计,但过程中有点困惑,先把这段代码贴出来:
Pattern pattern = Pattern.compile("\\s+"); Map<String, Long> wordCounts = Files.lines(Paths.get("myFile.txt")) .flatMap(pattern::splitAsStream) .collect(Collectors.groupingBy(String::toLowerCase, TreeMap::new, Collectors.counting()));
我目前的困惑点在于代码执行过程中对象的变化和处理方式,不过我已经搞懂了几个点:
Files.lines()返回的是Stream<String>,每个元素对应文件里的一行内容;- 我知道怎么把单个
String转换成Stream<Character>,代码是这样的:
Stream<Character> sch = "abc".chars().mapToObj(i -> (char)i);
但我不知道该怎么用这个方法把整个Stream<String>(也就是文件所有行的内容)都转换成字符流,进而实现字母频率统计。
内容的提问来源于stack exchange,提问作者Jack J
相关产品推荐
相关产品推荐

