2014-02-21 20 views
0

所以我要检查,如果我的字符串是任何ArrayList中而无需做: if(ArrayList1.Contains("Test") || ArrayList2.Contains("Test") || ArrayList3.Contains("Test")) { }如何检查一个字符串是否是在任何的ArrayList

我不知道是否有一种方法,我可以做到这一点与一个循环。

感谢

+0

什么是你的ArrayList变量名?他们是否遵循一种模式? –

+0

是包含?还是它包含? –

+0

是的,第一个是:第二个是:三分之二是三个e.t.c,最多十个。 – LucaSpeedStack

回答

0

比使用if像你这样做,不过,如果你使用番石榴,您可以使用Iterables其他没有多少选择:

if (Iterables.contains(Iterables.concat(list1, list2, etc), theString)) 
    // do your stuff 

如果没有,创建一个包含一个完整的列表中的所有他人使用.contains()它:

private static <T> List<T> concatLists(final List<T> list1, 
    final List<T>... others) 
{ 
    final List<T> ret = new ArrayList<T>(list1); 
    for (final List list: others) 
     ret.addAll(list); 
    return ret; 
} 

// In code: 

if (concatLists(list1, list2, etc).contains(theString)) 
    // do your stuff 
+1

不使用番石榴。 :/ – LucaSpeedStack

+1

然后只需创建一个包含所有其他的列表并使用'.contains()'就可以了 – fge

+0

没有想到这个谢谢! – LucaSpeedStack

3

创建一个ArrayList包含所有的ArrayList,然后遍历它们,就像:

for(ArrayList list : arrays){//arrays contains all your arraylsits, ArrayList1, ArrayList2 ... 
    return list.contains(value); 
} 
+0

或只是做.contains在包含所有arraylists :)的数组列表 – LucaSpeedStack

+0

@LucaSpeedStack不,你不能 – NimChimpsky

0

相反,你可以编写自定义ArrayList类,并覆盖contains方法来检查的独特内容。

​​
2

将所有ArrayList的内容放入Set中,然后查询该Set。

Set set=new HashSet(); 
for (ArrayList list: allLists) { 
    set.addAll(list); 
} 
... 
return set.contains("Test"); 

实际上,ArrayList的或任何集合,可用于代替HashSet的,但Hashset.contains是最快的方法。

+0

问题在于构建初始集合相当长。可能或不可能比连接所有列表更快... – fge

+0

嘿那里,我使用的是HashSets,但是如果我想从我刚刚检查过的哈希集中删除字符串,并且如果它确实在我想要的字符串中无需查明它来自哪个数组列表即可将其删除 – LucaSpeedStack

相关问题