java - Arraylist求连续重复元素的个数

标签 java arraylist

我正在尝试查找数组列表中重复元素的计数。 例如,如果名为“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)}

关于java - Arraylist求连续重复元素的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106181/

相关文章:

java - ArrayList 编译错误

java - 数组列表java程序

java - 当参数接受 Collection<X<?>> 时无法输入

java - Mockito自调用doAnswer重复调用?

java - 为什么打开 Web 浏览器时 Java 的计时会受到影响?

java - 我想在 Android Activity 中制作一个可滚动的带有图像的文本列表。我应该用什么?

Java:ArrayList 到 String?

java - 消费者和 worker 模式

java - 为什么在双重检查锁定中使用了volatile

java - AST 解析器获取 Java 类的名称