java - 使用java打印数组列表中元素的出现次数

标签 java arraylist

嗨,我已经创建了一个逻辑来计算数组列表中元素的出现次数,但它并没有按照我想要的确切顺序打印。下面我提供了我的代码和我的要求。

我需要以下格式,

list: [1, 1, 5, 3, 7 ,7 ,7 , 3, 11, 2, 2, 3, 1]
number: 1, count: 2
number: 5, count: 1
number: 3, count: 1
number: 7, count: 3
number: 3, count: 1
number: 11, count: 1
number: 2, count: 2
number: 3, count: 1
number: 1, count: 1

但是,我采用以下格式,

list: [1, 1, 5, 3, 7 ,7 ,7 , 3, 11, 2, 2, 3, 1]
number: 1, count: 3
number: 5, count: 1
number: 3, count: 3
number: 7, count: 3
number: 11, count: 1
number: 2, count: 2

这是我的代码

package com.abc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MyArrayListSort
{
public static void main(String []args){
new MyArrayListSort().start();
}
public void start() {
    List<Integer> list = getList(1, 1, 5, 3, 7 ,7 ,7 , 3, 11, 2, 2, 3, 1);

    Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
    for (Integer i : list) {
        Integer retrievedValue = map.get(i);
        if (null == retrievedValue) {
            map.put(i, 1);
        }
        else {
            map.put(i, retrievedValue + 1);
        }
    }

    System.out.println("list: " + list);
    printCount(map);
}

private List<Integer> getList(int... numbers)
{
List<Integer> list = new ArrayList<Integer>();
for (int i : numbers)
{
    list.add(i);
}
return list;
}

private void printCount(Map<Integer, Integer> map)
{
for (Integer key : map.keySet())
{
    System.out.println("number: " + key + ", count: " + map.get(key));
}
}
}

最佳答案

这可能是解决此问题的最短代码版本:

List<Integer> list = Arrays.asList(1, 1, 5, 3, 7, 7, 7, 3, 11, 2, 2, 3, 1);
System.out.println("list: " + list);
for (int i = 0, prev = -1; i < list.size(); i++) {
    if (i == list.size() - 1 || ! list.get(i).equals(list.get(i + 1))) {
        System.out.printf("number: %d, count: %d%n", list.get(i), i - prev);
        prev = i;
    }
}

输出

list: [1, 1, 5, 3, 7, 7, 7, 3, 11, 2, 2, 3, 1]
number: 1, count: 2
number: 5, count: 1
number: 3, count: 1
number: 7, count: 3
number: 3, count: 1
number: 11, count: 1
number: 2, count: 2
number: 3, count: 1
number: 1, count: 1

关于java - 使用java打印数组列表中元素的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778055/

相关文章:

java - WebElement#getScreenShotAs(OutputType.File)不工作

java - 该应用程序可能在其主线程中执行了过多的工作

java - SetBackgroundColor 影响多个列表项

java - ArrayList.add() 不添加到 ArrayList

javascript - 动态添加钛 TableView 中的值

java - JDBC 连接尝试与资源使用

java - 是否可以在 Stash 预接收 Hook 中使用 pep8 和 yapf?

java.lang.ClassCastException : java. lang.String 无法转换为 Panels.AddNewClientSaveAction

java - JFrame我应该怎么做(包括图片)?

java - 在已排序的 ArrayList 中查找插入位置