【问题标题】:How to check a list to see if an element exists or not? [duplicate]如何检查列表以查看元素是否存在? [复制]
【发布时间】:2018-01-31 02:13:18
【问题描述】:

我有一个简单的核心 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;
}

谢谢...

【问题讨论】:

    标签: java list contains


    【解决方案1】:

    因此,如果代码是 ES03 或 ES04 或其中任何一个,我想 填充 emailValidationMessage 变量,但它不这样做。

    你不应该这样做:

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

    【讨论】:

    • 我可以这样做,但我想降低太多||,所以我想是否有办法以更短的方式做到这一点。
    【解决方案2】:

    在第二个 if 中,您询问是否有一个 list 存储在您的 String 数组中。那是行不通的。你应该为你正在寻找的每个单独的值做一个.contains

    【讨论】:

    • 所以你的意思是我做对的方式是不可能的。
    • @Mike 对。您正在将苹果(单个字符串)与橙子(字符串的 List)进行比较。
    【解决方案3】:

    更改包含表达式:

    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 子句。

    【讨论】:

    • 它按我想要的方式工作。太感谢了。这样代码看起来又漂亮又干净。
    • 但效率不高。每次运行测试时,它都会创建一个新的Arrays.asList()。应使用private final static 字段来存储disjoint() 的参数。此外,参数应该是Set,而不是List,以加快disjoint 检查。出于同样的原因,Set&lt;String&gt; 也是 messageCodes 的更好类型。
    猜你喜欢
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 2021-12-17
    • 2011-08-02
    • 2018-01-10
    • 2015-10-06
    相关资源
    最近更新 更多