我试图从一个文件中读取,计数每个字母的频率,并打印结果。大写字母应视为其小写等价物。我有一个示例代码,用于计数文件中不同单词的频率:
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()输出一个流字符串,其中每个字符串实际上是文件中的一行。在this answer中,我知道可以用以下代码将字符串转换为流字符:
Stream<Character> sch = "abc".chars().mapToObj(i -> (char)i);但是,我无法完全找到一种方法来使用它来转换流字符串。
发布于 2018-03-16 07:34:32
使用flatMap(),您可以将流元素映射到新的流中。
在原始代码中,用.flatMap(pattern::splitAsStream)将一行映射为文字,但您也可以轻松地用.flatMap(s -> s.chars().mapToObj(i -> (char)i))将该行映射到字符。
https://stackoverflow.com/questions/49315272
复制相似问题