java - 按顺序识别列表打印中的重复项
问题描述
我有一个ArrayList,一个Java的Collection类,如下:
ArrayList<String> animals = new ArrayList<String>();
animals.add("bat");
animals.add("owl");
animals.add("bat");
animals.add("bat");
在上述动物列表中,每个唯一的动物名称应与出现次数一起排序。例如:蝙蝠名称出现 3 次,猫头鹰名称出现 1 次。预期输出应该是:
1:bat
2:bat
3:bat
1:owl
谁能帮我用java做编码
解决方案
您可以轻松地从Map
生成的输出中获得所需的输出。
Map<String, Long> counts =
animals.stream()
.collect(Collectors.groupingBy(e -> e, Collectors.counting()));
counts.forEach((k, v) -> LongStream.range(1,v+1).forEach(i -> System.out.println(i + ":" + k)));
编辑:由于Collectors.counting()
返回Long
,我不得不切换到LongStream
.
如果您愿意,可以Integer
按如下方式使用 s:
Map<String, Integer> counts =
animals.stream()
.collect(Collectors.groupingBy(e -> e, Collectors.summingInt(s -> 1)));
counts.forEach((k, v) -> IntStream.range(1,v+1).forEach(i -> System.out.println(i + ":" + k)));
无论哪种方式,输出都是:
1:bat
2:bat
3:bat
1:owl
推荐阅读
- maple - 如何在 MAPLE 中使用其他工作表中编写的函数
- scala - Spray Json:将泛型类型转换为 JsonFormat
- google-apps-script - Google 电子表格上的时间驱动条件更新
- azure-devops - 为(5 个用户)构建和发布包 vsts 免费版
- ios - IOS将UTC转换为本地时间不准确
- python - 如何在python中将数组转换为索引
- sql - SAP HANA SQL - 将单个列的多个结果行合并为单个行
- python - 将 mysql 数据导出到 excel 会引发意外的 datetime.datetime
- r - 在 dplyr R 中添加组计数输出错误的数字?
- java - 如何使用 Hibernate 依赖项解决 Apache Ignite?