如何优雅的统计List集合中元素重复出现次数
背景
统计List集合中元素出现的次数,相信大家都做过。举个例子,我们要统计集合中名字重复的次数。
List<String> nameLists = Arrays.asList("Lvshen", "Lvshen", "Zhouzhou", "Huamulan", "Huamulan", "Huamulan");
方式一
一般我们会这么做:
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()一部到位。
Map<String, Long> nameMap = nameLists.stream().collect(Collectors.groupingBy(p -> p, Collectors.counting()));
运行结果如下:
上面的代码就是对集合中的元素进行分组统计,是不是像SQL的统计方法呢。
select key,count(key) from table group by key;
方式三
Java8还有其他的统计方式:
Map<String, Integer> 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的小知识。
相关文章
- Spring Boot中对接Twilio以实现发送验证码和验证短信码
- Spring Boot 3.5:这次更新让你连配置都不用写了,惊不惊喜?
- Spring Boot+Pinot实战:毫秒级实时竞价系统构建
- SpringBoot敏感配置项加密与解密实战
- SpringBoot 注解最全详解,建议收藏!
- Spring Boot 常用注解大全:从入门到进阶
- SpringBoot启动之谜:@SpringBootApplication如何让配置化繁为简
- Springboot集成Kafka原理_spring集成kafka的原理
- Spring Boot中@Data注解的深度解析与实战应用
- 大佬用1000字就把SpringBoot的配置文件讲的明明白白!