Java 小模块之--统计字符串中元素个数

曾经看过我Stream或者Guava类库等文章的小伙伴应该很明白我这篇博文的意义所在了
一是给读者提供综合的博文入口 二是自己也总结一下思路
ps: 之前没看过小编文章的小伙伴也不要紧 可以先看下本文所介绍的几种处理方法 如果觉得还不错 可以点击文章末尾的链接跳转具体页面进行探讨

普通方式(Map)

Map<Character, Integer> map1=new TreeMap<>();String str="112221324kassxsbx";int count;//遍历字符串 用字符串指定下标的值做运算for(int i=0;i<str.length();i++) {    //每次循环前初始化count的值    count=1;    //判断map集合中是否存在i下标对应的字符串的值 不存在则将count=1 存入    if(!map1.containsKey(str.charAt(i))) {map1.put(str.charAt(i), count);}    //如果存在 则把count+1后存入    else {    count+=map1.get(str.charAt(i));    map1.put(str.charAt(i), count);    }}//遍历map集合map1.forEach((k,v)->log(k+"出现次数"+v));//        1出现次数3//        2出现次数4//        3出现次数1//        4出现次数1//        a出现次数1//        b出现次数1//        k出现次数1//        s出现次数3//        x出现次数2

jdk8 Stream处理

String str="1233ADddsd";/**这里将字符串转换为字符数组再转换为集合 利用了Hutool的万能转换器的技术*/var treemap=new TreeMap<>(toList(convert(char[].class, str))                    //将集合转换为Stream                    .stream()                    //排序Stream中的元素                    .sorted()                    //利用数据分组和分组后子集处理技术                     //将数据按照Stream中每个元素本身进行分组 并将每组元素个数返回                    .collect(Collectors.groupingBy(ic->ic,Collectors.counting())));//遍历集合treemap.forEach((k,v)->log(k+"出现的次数"+v));//        1出现的次数1//        2出现的次数1//        3出现的次数2//        A出现的次数1//        D出现的次数1//        d出现的次数3//        s出现的次数1
  • 关于对Stream的介绍和使用 可以参考小编的文章:
    https://segmentfault.com/a/11...
是不是觉得这样已经简便了很多 但是不要急 我们有更好的

Guava 类库处理

String string="1234234qwew";//利用Guava中的新集合类型 Multiset 存储数据的特性Multiset<Object> create = HashMultiset.create();//字符串转换为集合的技术 依旧利用Hutool中的万能转换器 实在是方便啊!!!create.addAll(toList(convert(char[].class,string)));//结合Stream的查重和排序对集合中元素进行过滤create.stream().distinct().sorted().forEach((ss)->log(ss+"出现和贺词"+create.count(ss)));//        1出现和贺词1//        2出现和贺词2//        3出现和贺词2//        4出现和贺词2//        e出现和贺词1//        q出现和贺词1//        w出现和贺词2
  • 依旧给各位奉上关于Guava的文章:
    https://segmentfault.com/a/11...
到这里代码就又简便高级许多吧 但是我们还有更好的

Hutool 类库处理

String string="1234234AqAw34qw";/**利用 IterUtil 下的countMap :        根据集合返回一个元素计数的Map,        所谓元素计数就是假如这个集合中某个元素出现了n次,        那将这个元素做为key,n做为value*/Map<?, Integer> countMap =new TreeMap(countMap(toList(convert(char[].class,string))));countMap.forEach((k,v)->log(k+" 出现了几次: "+v));//        1 出现了几次: 1//        2 出现了几次: 2//        3 出现了几次: 3//        4 出现了几次: 3//        A 出现了几次: 2//        q 出现了几次: 2//        w 出现了几次: 2
最后这一行代码的解决方式大家可否喜欢呐!!!
  • 关于Hutool工具的解析 大家慢慢等待小编整理即可 到时候自然更新网址
  • 在此先奉上API官方解析:https://www.bookstack.cn/read...