2015-10-14 65 views
1

我該怎麼做?在java中獲取ArrayList中分組屬性的大小

我有一個ArrayList<ErrorDetails>其中error details是POJO具有errorCodeerrorMessage屬性。這個錯誤列表中

數據可以是 -

[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]. 

我怎樣才能做到這一點?

回答

0

值,您可以在您的List迭代,並把錯誤代碼key S IN 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 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; 
    } 

} 
+0

這個答案是錯的,最後只返回尺寸1所有ErrorCode的 – AngryJS

+0

工作!謝謝! – AngryJS

0

您可以檢查密鑰是否存在。如果它不存在,則添加鍵和1作爲值。如果它確實存在,則增加了按鍵的1.

1

您可以將和與Java 8 featue算,如:

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