网站首页 > java教程 正文
背景
统计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的小知识。
- 上一篇: Java 里各个容器的最全遍历方法汇总
- 下一篇: ArrayList入门
猜你喜欢
- 2024-11-20 学习编程第189天 python编程 遍历字典与列表
- 2024-11-20 女朋友跟我吐槽 Java 中 ArrayList 遍历时删除元素的各种姿势
- 2024-11-20 一篇文章带你弄懂Python基础之列表介绍和循环遍历
- 2024-11-20 Java8 Stream流递归,几行代码搞定遍历树形结构
- 2024-11-20 ArrayList还是LinkedList?性能可差千倍
- 2024-11-20 Java集合-List
- 2024-11-20 如何正确遍历删除List中的元素
- 2024-11-20 python每天学习一点点(遍历列表-for循环)
- 2024-11-20 Java集合框架进阶:玩转List、Set和Map接口的高级用法!
- 2024-11-20 java8对List集合根据某一字段进行分组
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)