首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何优雅的统计List集合中元素重复出现次数

如何优雅的统计List集合中元素重复出现次数

作者头像
Lvshen
发布2022-05-05 19:20:46
发布2022-05-05 19:20:46
2.8K0
举报

背景

统计List集合中元素出现的次数,相信大家都做过。举个例子,我们要统计集合中名字重复的次数。

代码语言:javascript
复制
List<String> nameLists = Arrays.asList("Lvshen", "Lvshen", "Zhouzhou", "Huamulan", "Huamulan", "Huamulan");

方式一

一般我们会这么做:

代码语言:javascript
复制
Map<String, Integer> nameMap = Maps.newHashMap();

nameLists.forEach(name -> {
    Integer counts = nameMap.get(name);
    nameMap.put(name, counts == null ? 1 : ++counts);
});
System.out.println(nameMap);

首先创建一个map,然后遍历list,把list元素作为map的key,初始的value设置为1,如果遍历到重复的key,value加1,这样我们就统计出想要的结果了。

上面是我们通常的做法,相信大家都这样做过。

方式二

Java8后我么又有了新的统计方法,我们可以使用stream()一步到位。

代码语言:javascript
复制
Map<String, Long> nameMap = nameLists.stream().collect(Collectors.groupingBy(p -> p, Collectors.counting()));

运行结果如下:

上面的代码就是对集合中的元素进行分组统计,是不是像SQL的统计方法呢。

代码语言:javascript
复制
select key,count(key) from table group by key;

方式三

Java8还有其他的统计方式:

代码语言:javascript
复制
Map<String, Integer> nameMap = Maps.newHashMap();

nameLists.forEach(name -> nameMap.compute(name, (k, v) -> v == null ? 1 : ++v));

使用compute和方法一类似,但是这里少个get获取这一步骤。

进入compute方法,我们发现里面有获取原有值这一项:

代码语言:javascript
复制
V oldValue = get(key);

然后在旧值的基础上操作获取新值:

代码语言:javascript
复制
V newValue = remappingFunction.apply(key, oldValue);

好了今天的Java8小知识分享就到这里了。下次我们再来分享其他Java8的小知识。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lvshen的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 方式一
  • 方式二
  • 方式三
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档