使用jdk8 stream 统计单词数

本文展示了如何利用Java 8 Stream API从文本文件中读取内容并统计单词数量。通过BufferedReader读取文件,然后使用Stream的map、filter、split、flatMap和sum方法进行处理,最终得到单词总数。此外,还演示了如何进一步统计每个单词的出现次数,利用Collectors.groupingBy和counting()方法实现,并输出详细的统计信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  有同学问如何使用stream统计单词数。这是个好例子,也很典型,在这里补上。

  下面的例子实现了从一个文本文件读取(英文)文本并统计单词数的功能。

  package com.imooc;

  import java.io.BufferedReader;

  import java.io.FileReader;

  import java.io.IOException;

  /**

  * 使用stream统计文章单词数

  *

  * @author 晓风轻

  *

  */

  public class StreamWordDemo {

  public static void main(String[] args) throws IOException {

  // 使用try-resource 关闭资源

  try (BufferedReader reader = new BufferedReader(

  new FileReader(webflux.txt))) {

  long wordCount = reader.lines()

  // trim前后空格(使用方法引用)

  .map(String::trim)

  // 过滤掉空串

  .filter(s - !s.isEmpty())

  // 把空格隔开的转为单词数组

  .map(s - s.split( ))

  // 得到数组长度

  .mapToInt(array - array.length)

  // 并行(都是无状态操作)

  .parallel()

  // 求和

  .sum();

  System.out.println(单词数: + wordCount);

  }

  }

  }

  牵涉的知识点主要还是lambda表达式和stream的基本应用。大家可以看出,使用stream编程代码非常清晰和简单,可读性很强。

  下面获取每个单词出现的次数

  // 使用try-resource 关闭资源

  try (BufferedReader reader = new BufferedReader(

  new FileReader(webflux.txt))) {

  MapString, Long counts = reader.lines()

  // trim前后空格(使用方法引用)

  .map(String::trim)

  // 过滤掉空串

  .filter(s - !s.isEmpty())

  // 把空格隔开的转为数组

  .map(s - s.split( ))

  // 数组转成流

  .map(array - Stream.of(array))

  // 拉平

  .flatMap(stream - stream)

  // 分组

  .collect(Collectors.groupingBy(s - s, Collectors.counting()));

  System.out.println(单词出现次数: + counts);

  // 统计信息

  LongSummaryStatistics summaryStatistics = counts.entrySet().stream()

  // 得到次数

  .mapToLong(entry - entry.getValue())

  // 统计

  .summaryStatistics();

  System.out.println(统计信息: + summaryStatistics);

  }

  输出的统计信息为:

  统计信息:LongSummaryStatistics{count=170, sum=271, min=1, average=1.594118, max=14}

  可以看出,一共有271个单词,不同的词有170个,出现最多的14次,最少1次,平均1.594118次。

  这就是stream的编程风格,其中lambda表达式是函数式编程的基础,是后面的stream,reactor的前置基础知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值