获取 java 中数组列表中分组属性的大小

Get Size of grouped properties in an arraylist in java

我该怎么做?

我有一个 ArrayList<ErrorDetails>,其中 error details 是具有 errorCodeerrorMessage 属性的 POJO。

此错误列表中的数据可以是 --

 [999, "Hello"]
 [111, "Hello"]
 [999, "Hello"]
 [111, "Hello"]
 [999, "Hello"]
 [999, "Hello"]
 [456, "Hello"]
 [456, "Hello"]
 [999, "Hello"]

我想得到一个包含 3 个项目的列表,

[unique error code, no of occurence of this error code in previous list].

我该怎么做?

您可以检查密钥是否存在。如果不存在,则添加键和 1 作为值。如果确实存在,则将键的值增加 1。

您可以遍历 List 并将错误代码作为 keys 放入 Map 中,并将值作为出现次数

代码:

    List<ErroCodeMessage> errors = new ArrayList<>();
    //... add ErroCodeMessages
    Map<Integer, Integer> stat = new HashMap<>();

    for (ErroCodeMessage error : errors) {
        if (stat.get(error.getErrorCode()) != null) {
            stat.put(error.getErrorCode(), stat.get(error.getErrorCode()) + 1);
        } else {
            stat.put(error.getErrorCode(), 1);
        }
    }

ErrorCodeMessage POJO class

class ErroCodeMessage {

    private int errorCode;
    private String errorMessage;

    public ErroCodeMessage(int errorCode, String errorMessage) {
        super();
        this.errorCode = errorCode;
        this.errorMessage = errorMessage;
    }

    public int getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(int errorCode) {
        this.errorCode = errorCode;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

}

您可以使用 Java 8 个特征 Stream 进行分组和计数,例如:

Map<Integer, Long> mapping = list.stream().collect(
        groupingBy(ErrorDetails::getErrorCode, counting()));