【发布时间】:2018-08-25 04:44:55
【问题描述】:
我正在尝试从文件中读取,计算每个字母的频率,然后打印结果。大写字母应被视为等效的小写字母。我有示例代码开始计算文件中不同单词的频率:
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);
但是,我想不出一种方法来使用它来转换流字符串。
【问题讨论】:
标签: java functional-programming stream java-stream boxing