2017-08-22 1 views
-1

J'ai une question simple de base de Java. J'ai une liste qui porte plusieurs codes de réponse. Je renvoie des messages basés sur les codes de réponse dans ma liste. Pour l'un des scénarios, je dois vérifier si la liste contient l'un des codes de réponse. Je l'ai fait les manières suivantes mais il l'ignore et les codes vont à l'autre bloc. Donc, si le code est ES03 ou ES04 ou l'un d'entre eux, je veux remplir la variable emailValidationMessage mais il ne le fait pas.Comment vérifier une liste pour voir si un élément existe ou pas?

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; 
} 

... Merci

Répondre

2

Modifier l'expression contient:

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; 
} 

Les Collections.disjoint agit en tant que "contient une" comparaison. De cette façon, si un ou plusieurs des codes d'erreur existent, il ira dans la clause if.

+1

Ça a marché comme je le voulais. Merci beaucoup. Le code est joli et propre de cette façon. – Mike

+0

Mais pas efficace. Il crée un nouveau 'Arrays.asList()' chaque fois que le test est exécuté. Un champ 'private final static' devrait être utilisé pour stocker l'argument de' disjoint() '. En outre, l'argument devrait être un 'Set', pas un' List' pour accélérer le contrôle 'disjoint'. Pour cette raison, "Set " serait aussi un meilleur type pour 'messageCodes', pour la même raison. – AJNeufeld

1

Donc, si le code est ES03 ou ES04 ou l'un d'eux que je veux remplir la variable emailValidationMessage mais il ne le fait pas.

ne devrait pas vous faire quelque chose comme:

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

Je pourrais le faire de cette façon, mais je veux abaisser trop de ||, alors j'ai pensé qu'il y avait un moyen de le faire de façon plus courte. – Mike

1

Dans le second cas, vous demandez s'il y a une liste stockée dans votre tableau de chaînes. Cela ne marchera pas. Vous devriez faire un .contains pour chacune des valeurs que vous recherchez.

+0

Donc vous voulez dire que ce n'est pas possible comme je le fais bien. – Mike

+0

@Mike Droite. Vous comparez des pommes (cordes individuelles) avec des oranges (une _List_ of Strings). – mjuarez