首页 > 解决方案 > 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}

标签: javaarraylist

解决方案


这里有一个简单的方法是只迭代一次数组列表,然后在我们进行时保持计数:

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)}

推荐阅读