2017-08-22 172 views
-1

我有一個簡單的核心java問題。我有一個包含多個響應代碼的列表。我將根據列表中的響應代碼返回消息。對於其中一個場景,我必須檢查列表是否包含任何一個響應代碼。我已經通過以下方式完成了它,但它忽略了它,代碼轉到了else塊。因此,如果代碼是ES03或ES04或其中任何一個,我想填充emailValidationMessage變量,但它不會這樣做。如何檢查列表以查看元素是否存在?

List<String> messageCodes = this.getEmailValidationCode(eSignatureInTO); 

    if(messageCodes.contains("ES01")) { 
       IESignatureIntegrationOutDto eSignatureOutTO = getEsignService().resendDocuments(eSignatureInTO); 
       eSignatureInTO.setResendDocs(eSignatureOutTO.isResendDocs()); 

    } else if(messageCodes.contains("EE01")) { 
       emailValidationMessage = UiIntegrationKeyConstants.EMAIL_FORMAT_ERROR_MESSAGE; 

    } else if(messageCodes.contains(Arrays.asList("ES02", "ES03", "ES04", "EE02", "EE03", "EE04"))) { 
       emailValidationMessage = UiIntegrationKeyConstants.EMAIL_VALIDATION_ERROR_MESSAGE; 

    } else { 
       emailValidationMessage = UiIntegrationKeyConstants.EMAIL_VALIDATION_MESSAGE; 
} 

謝謝...

回答

2

更改包含表達:

List<String> messageCodes = this.getEmailValidationCode(eSignatureInTO); 

if(messageCodes.contains("ES01")) { 
    IESignatureIntegrationOutDto eSignatureOutTO = getEsignService().resendDocuments(eSignatureInTO); 
    eSignatureInTO.setResendDocs(eSignatureOutTO.isResendDocs()); 
} else if(messageCodes.contains("EE01")) { 
    emailValidationMessage = UiIntegrationKeyConstants.EMAIL_FORMAT_ERROR_MESSAGE; 
} else if(!Collections.disjoint(messageCodes,Arrays.asList("ES02", "ES03", "ES04", "EE02", "EE03", "EE04"))) { 
    emailValidationMessage = UiIntegrationKeyConstants.EMAIL_VALIDATION_ERROR_MESSAGE; 
} else { 
    emailValidationMessage = UiIntegrationKeyConstants.EMAIL_VALIDATION_MESSAGE; 
} 

Collections.disjoint用作 「包含任何的」 比較。這樣,如果存在一個或多個錯誤代碼,它將進入if子句。

+1

它以我想要的方式工作。非常感謝。代碼看起來很不錯並且很乾淨。 – Mike

+0

但效率不高。每次測試運行時,它會創建一個新的'Arrays.asList()'。 'private final static'字段應該用於存儲'disjoint()'的參數。另外,參數應該是一個'Set',而不是'List'來加速'disjoint'檢查。對於這個問題,'Set '對於'messageCodes'也是一個更好的類型,出於同樣的原因。 – AJNeufeld

1

因此,如果代碼是ES03 ES04或或我想 其中任何一個填充emailValidationMessage變量,但它並沒有做到這一點。

你不是應該做這樣的事情:

if(messageCodes.contains("ES03") || messageCodes.contains("ES04")) { 
     emailValidationMessage = "whatever your value should be"; 
} 
+0

我可以這樣做,但我想降低太多的||,所以我想如果有辦法做到這一點的方式。 – Mike

1

在第二個如果,你問如果有存儲在您的字符串數組內列表。這是行不通的。你應該爲你正在尋找的每個單獨的值做一個.contains

+0

所以你的意思是說我做對的方式是不可能的。 – Mike

+0

@Mike對。你正在比較蘋果(單個字符串)和橙子(字符串_List_)。 – mjuarez