List.contains(String)无法正常工作

时间:2018-04-16 12:03:54

标签: java arrays list arraylist collections

无法理解列表的工作原理。包含()方法,

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

我想检查 strAttributeList 中的每个选定属性是否应出现在 subscriptionAttrList 中,但我无法检查包含方法的未知行为。

演示列表值 strAttributeList = {“ALL”} 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个列表的值,因为这花费了我很多时间。谢谢你提前。

2 个答案:

答案 0 :(得分:0)

如果subscriptionAttrList中未包含List的任何元素,则返回false 因为两个false有一个共同的元素,但并非所有元素都必然会返回strAttributeList= {"ALL"} subscriptionAttrList = {"ALL", "NONE", "PO"}

true

如果包含元素并且在循环返回false之后,您应该返回for(String strAttrValue : strAttributeList){ if(subscriptionAttrList.contains(strAttrValue)) return true; } return false; ,因为这意味着没有元素匹配:

import collections
edges = collections.defaultdict(list)

答案 1 :(得分:0)

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

您的代码找到了一个" ALL"在列表的开头,但仍然迭代到第二个元素只是失败并返回false,因此你总是得到假。它只有当你只有1个元素时才能进一步迭代,你得到一个真实的。