如何优雅的统计List集合中元素重复出现次数 | 您所在的位置:网站首页 › 怎样统计重复项 › 如何优雅的统计List集合中元素重复出现次数 |
背景
统计List集合中元素出现的次数,相信大家都做过。举个例子,我们要统计集合中名字重复的次数。 List nameLists = Arrays.asList("Lvshen", "Lvshen", "Zhouzhou", "Huamulan", "Huamulan", "Huamulan"); 方式一一般我们会这么做: Map 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()一步到位。 Map nameMap = nameLists.stream().collect(Collectors.groupingBy(p -> p, Collectors.counting()));运行结果如下: 上面的代码就是对集合中的元素进行分组统计,是不是像SQL的统计方法呢。 select key,count(key) from table group by key; 方式三Java8还有其他的统计方式: Map nameMap = Maps.newHashMap(); nameLists.forEach(name -> nameMap.compute(name, (k, v) -> v == null ? 1 : ++v));使用compute和方法一类似,但是这里少个get获取这一步骤。 进入compute方法,我们发现里面有获取原有值这一项: V oldValue = get(key);然后在旧值的基础上操作获取新值: V newValue = remappingFunction.apply(key, oldValue);好了今天的Java8小知识分享就到这里了。下次我们再来分享其他Java8的小知识。 往期推荐我写出这样干净的代码,老板直夸我 云南丽江旅游攻略 使用ThreadLocal怕内存泄漏? Java进阶之路思维导图 程序员必看书籍推荐 3万字的Java后端面试总结(附PDF) 扫码二维码,获取更多精彩。或微信搜Lvshen_9,可后台回复获取资料 回复"java" 获取java电子书; 回复"python"获取python电子书; 回复"算法"获取算法电子书; 回复"大数据"获取大数据电子书; 回复"spring"获取SpringBoot的学习视频。 回复"面试"获取一线大厂面试资料 回复"进阶之路"获取Java进阶之路的思维导图 回复"手册"获取阿里巴巴Java开发手册(嵩山终极版) 回复"总结"获取Java后端面试经验总结PDF版 回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF) 回复"并发导图"获取Java并发编程思维导图(xmind终极版)另:点击【我的福利】有更多惊喜哦。 |
CopyRight 2018-2019 实验室设备网 版权所有 |