[英]Stream<String> conversion to 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()输出流字符串,其中每个字符串实际上是文件中的一行。 从这个答案中 ,我知道可以使用以下代码将String转换为Stream Character:
Stream<Character> sch = "abc".chars().mapToObj(i -> (char)i);
但是,我不太想办法使用它来转换流字符串。
使用flatMap()
可以将流元素映射到新流中。
在原始代码中,使用.flatMap(pattern::splitAsStream)
将行映射到单词中,但是您可以使用.flatMap(s -> s.chars().mapToObj(i -> (char)i))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.