使用合适的数据结构统计单词次数

肝胆相照
• 阅读 2560

本文主要讲述一下如何使用apache collections4的bag以及guava的multiset的数据结构来统计单词次数。

maven

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>22.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.1</version>
        </dependency>

bag

    @Test
    public void testBag(){
        Bag<String> bag = new HashBag<>();
        String content = "She is beautiful and she is my angel";
        Arrays.stream(content.split(" ")).forEach(word -> {
            bag.add(word);bag.add(word);
        });
        //get unique key
        Set<String> set = bag.uniqueSet();
        set.stream().forEach(word -> {
            System.out.println(word + "-->" + bag.getCount(word));
        });
    }

multiset

    @Test
    public void testMultiSet(){
        String content = "She is beautiful and she is my angel";
        Multiset<String> set = HashMultiset.create();
        Arrays.stream(content.split(" ")).forEach(word -> {
            set.add(word);
        });
        set.stream().distinct().forEach(e -> {
            System.out.println(e + "-->" + set.count(e));
        });
    }

小结

经过封装后的数据结构,用起来非常简洁。

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
java高分局之jstat命令使用
java高分局之jstat命令使用jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:jstat命令选项vmid间隔时间/毫秒查询次数注意:使用的jdk版本是jdk8.类加载统计:C:\Users\Administrat
Wesley13 Wesley13
3年前
java笔试手写算法面试题大全含答案
1.统计一篇英文文章单词个数。publicclassWordCounting{publicstaticvoidmain(String\\args){try(FileReaderfrnewFileReader("a.txt")){intcounter0;booleanstatefal
Wesley13 Wesley13
3年前
nginx日志统计分析
 本文主要使用的是grep,awk,cut等工具来对nginx日志进行统计和分析,具体如下:1,列出当天访问最多次数的ip地址cutdf1/usr/local/nginx/logs/20160329/access\_2016032913.log|uniqc|sortrn|head20 ro
Stella981 Stella981
3年前
MapReduce统计单词
一、HDFS个人理解      HDFS是个文件系统,只不过加了个分布式作为文件系统的前缀而已,大概的结构就像LINUX系统。文件大的一个电脑存储不下,怎办?那就想办法存储到不同的机子上呗,于是HDFS就应用而生了。众所周知,文件在硬盘上是以文件块的形式存储。什么句柄啊,真心不懂,只能感知,没人能明白0和1,当然也没必要。二、Map个人理解
Easter79 Easter79
3年前
Storm结合kafka参数配置详解+代码示例(累计单词出现的次数)
kafka参数配置详情:publicfinalBrokerHostshosts;//设置kafka从哪里获取相关的配置信息publicfinalStringtopic;//从哪个topic开始消费publicfinalStringclientId;//设置客户端标识publicintfetchSizeBytes10
Stella981 Stella981
3年前
Linux应急响应(四):盖茨木马
0x00前言Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马,主要恶意特点是具备了后门程序,DDoS攻击的能力,并且会替换常用的系统文件进行伪装。木马得名于其在变量函数的命名中,大量使用Gates这个单词。分析和清除盖茨木马的过程,可以发现有很多值得去学习和借鉴的地方。0x01应急场景
Stella981 Stella981
3年前
Spark Streaming(5):Spark Window function in Java
首先,看下window函数的图解:!(https://static.oschina.net/uploads/space/2017/0810/172732_McZi_1386672.png)下面这个代码是计算一分钟之内的单词数量统计,每两秒获取一次数据,同时处理数据时间也是两秒,窗口大小为1分钟1.数据源packagecom.ss
Stella981 Stella981
3年前
MapReduce实现单词统计
开发工具:IDEAmapreduce实现思路:Map阶段:a) 从HDFS的源数据文件中逐行读取数据b) 将每一行数据切分出单词c) 为每一个单词构造一个键值对(单词,1)d) 将键值对发送给reduceReduce阶段:a) 接收map阶段输出的单词键值对b) 将相同单词的键值对汇聚成一组c) 对每
Trie树简介及应用
Trie树在单词搜索、统计、排序等领域有大量的应用。文章从基础概念到具体的脏话过滤的应用、Redis的RAX和Linux内核的RadixTree对Trie树做了介绍。数据结构和算法是程序高性能的基础,本文抛砖引玉,希望大家对Trie树有所了解,并在未来开发过程实践和应用Trie树解决中类似情景的问题。
Python进阶者 Python进阶者
1年前
Pandas中如何统计各个销售地出线的次数?
大家好,我是皮皮。一、前言前几天在Python最强王者交流群【wen】问了一个Pandas数据处理的问题,一起来看看吧。他的代码如下:pythonimportpandasaspdresults二、实现过程这里【莫生气】给了一个思路,如下所示:直接df后来【