如何检查数组是否包含特定术语 - Android

时间:2012-03-24 17:32:15

标签: android arrays list search contains

我目前有一个读取

的声明
if(Arrays.asList(results).contains("Word"));

我想在.contains参数中添加至少几个术语,但我认为在一行上有大量术语是不好的编程习惯。

我的问题是,是否有更合适的方法来存储我想要的.contains参数中的所有值?

由于

3 个答案:

答案 0 :(得分:7)

您可以使用两个列表的交集:

String[] terms = {"Word", "Foo", "Bar"};
List<String> resultList = Arrays.asList(results);
resultList.retainAll(Arrays.asList(terms))
if(resultList.size() > 0)
{
         /// Do something
}

为了提高性能,最好使用两个HashSet s:

的交集
String[] terms = {"Word", "Foo", "Bar"};
Set<String> termSet = new HashSet<String>(Arrays.asList(terms));
Set<String> resultsSet = new HashSet<String>(Arrays.asList(results));
resultsSet.retainAll(termSet);
if(resultsSet.size() > 0)
{
         /// Do something
}

作为旁注,上述代码会检查{em> ANY 是否出现在results中。要检查结果中是否显示 ALL ,您只需确保交叉点与期限列表的大小相同:

 resultsSet.retainAll(termSet);
 if(resultSet.size() == termSet.size())

答案 1 :(得分:1)

您可以使用Android的java.util.Collections  课程来帮助你。特别是,disjoint将非常有用:

  

返回指定的集合是否没有共同的元素。

这是一个可以帮助您入门的代码示例。

在您的活动中或您检查的位置,查看您的搜索结果是否包含您要查找的字词:

    String[] results = {"dog", "cat"};
    String[] wordsWeAreLookingFor = {"foo", "dog"};
    boolean foundWordInResults = this.checkIfArrayContainsAnyStringsInAnotherArray(results, wordsWeAreLookingFor);
    Log.d("MyActivity", "foundWordInResults:" + foundWordInResults);

同样在你的同一个班级,或者也许是一个实用工具类:

private boolean checkIfArrayContainsAnyStringsInAnotherArray(String[] results, String[] wordsWeAreLookingFor) {
    List<String> resultsList = Arrays.asList(results);
    List<String> wordsWeAreLookingForList = Arrays.asList(wordsWeAreLookingFor);
    return !Collections.disjoint(resultsList, wordsWeAreLookingForList);
}

请注意,此特定代码示例在foundWordInResults中包含true,因为“dog”同时包含resultswordsWeAreLookingFor

答案 2 :(得分:0)

为什么不将results存储在HashSet中?使用HashSet,您可以受益于键的散列,它将使您的断言更快。

Arrays.asList(results).contains("Word")每次只是为了进行线性搜索而创建一个临时的List对象,它不能有效地使用内存并且速度很慢。

您可以使用HashSet.containsAll(Collection collection)方法来执行您想要的操作,但是如果您想创建一个临时的参数列表,那么它就无法有效地使用内存断言。

我建议如下:

HashSet hashSet = ....
public assertSomething(String[] params) {
    for(String s : params) {
       if(hashSet.contains(s)) {
           // do something
           break;
       }
    }
}
相关问题