java - Arraylist 查找连续重复元素的计数
问题描述
我正在尝试查找数组列表中重复元素的 COUNT。例如,如果名为“answerSheerPacketList”列表的数组包含类似的值{20,20,30,40,40,20,20,20}
,我需要显示类似的输出{20=2,30=1,40=2,20=3}
。
Map<String, Integer> hm = new HashMap<String, Integer>();
for (String a : answerSheerPacketList) {
Integer j = hm.getinsAnswerSheetId(a);
hm.put(a, (j == null) ? 1 : j + 1);
}
// displaying the occurrence of elements in the arraylist
for(Map.Entry<String, Integer> val : hm.entrySet()){
System.out.println("Element " + val.getKey() + " "
"occurs" + ": " + val.getValue()+ " times");
}
当我执行上面的代码时,我得到了类似的输出,{20=5,30=1,40=2}
但我试图获得类似的输出{20=2,30=1,40=2,20=3}
。
解决方案
这里有一个简单的方法是只迭代一次数组列表,然后在我们进行时保持计数:
List<Integer> list = new ArrayList<>();
list.add(20);
list.add(20);
list.add(30);
list.add(40);
list.add(40);
list.add(20);
list.add(20);
list.add(20);
Integer curr = null;
int count = 0;
System.out.print("{");
for (int val : list) {
if (curr == null) {
curr = val;
count = 1;
}
else if (curr != val) {
System.out.print("(" + curr + ", " + count + ")");
curr = val;
count = 1;
}
else {
++count;
}
}
System.out.print("(" + curr + ", " + count + ")");
System.out.print("}");
{(20, 2)(30, 1)(40, 2)(20, 3)}
推荐阅读
- django - 在 django rest 框架中使用 orientdb OGM 删除边的正确方法是什么?
- python - 当A上存在重复值时,如何找到A列上分组数据的最小值和另一列B的最小值
- python - node.js 中的 gzip 解压问题(不正确的标头检查)
- java - 如何使用 project-panama 访问 pthread api
- keyboard - 如何在 SwiftUI 中设置 TextField 的键盘类型?
- flask - 初始化 SQLAlchemy 的正确方法
- powershell - 如何使用 PowerShell 替换文件夹(和子文件夹)中所有文件名的多个字符 (<3)
- regex - 用于捕获以逗号分隔的单词列表的 RegEx 模式
- c# - XPath:有没有办法选择动态添加的兄弟的子元素
- react-admin - 有没有办法在 store admin.resource[RESOURCE].list 级别下添加 redux reducer?