【问题标题】:List.contains(String) not working correctlyList.contains(String) 无法正常工作
【发布时间】:2018-04-16 12:03:53
【问题描述】:

无法理解 List.contains() 方法的工作原理,

strAttributeList - 选定属性列表 subscriptionAttrList- 所有属性列表

我想检查 strAttributeList 中的每个选定属性是否应该存在于 subscriptionAttrList 中,但我无法检查 contains 方法的未知行为。 p>

演示列表值: strAttributeList= {"全部"} subscriptionAttrList = {"ALL", "NONE", "PO"}

for(String strAttrValue : strAttributeList){
    if(!subscriptionAttrList.contains(strAttrValue)) 
    return false;
};

O/P:

    subscriptionAttrList.contains(strAttrValue); //false
    subscriptionAttrList.contains(strAttrValue.toString); //false
    subscriptionAttrList.contains(""+strAttrValue+""); //false
    subscriptionAttrList.contains(""+strAttrValue.toString+""); //false
    subscriptionAttrList.contains("ALL"); //true

怎么所有的输出都是假的,第五个是真的?

请提供比较 2 个列表的值的正确方法,因为这需要我很多时间。提前谢谢你。

【问题讨论】:

  • 什么是o/p? ..
  • subscriptionAttrList 中的元素与strAttributeList 中的唯一元素不匹配后,您将返回false。尝试调试您的代码。
  • contains() 的工作原理并不为人所知。它可以按您的预期工作,任何错误都在您自己的代码中。
  • O/P 中strAttrValue 中有什么内容?
  • 为什么不subscriptionAttrList.containsAll(strAttributeList)

标签: java arrays list arraylist collections


【解决方案1】:

如果strAttributeList 的任何元素不包含在subscriptionAttrList 中,则返回false。
因此,两个Lists 有一个共同点,但不是所有你都必须返回false

strAttributeList= {"ALL"} 

subscriptionAttrList = {"ALL", "NONE", "PO"}

如果包含一个元素,你应该返回true,并且在循环之后返回false,因为这意味着没有匹配的元素:

for(String strAttrValue : strAttributeList){
    if(subscriptionAttrList.contains(strAttrValue)) 
       return true;
}
return false;

【讨论】:

    【解决方案2】:
    for(String strAttrValue : strAttributeList){
        if(!subscriptionAttrList.contains(strAttrValue)) 
        return false;
    };
    

    您的代码在列表的开头找到一个“ALL”,但仍然迭代到第二个元素,但失败并返回 false,因此您总是得到 false。只有当你只有 1 个元素,因此没有什么可以进一步迭代时,你才会得到一个真值。

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      相关资源
      最近更新 更多