所以我想检查我的字符串是否在任何arraylist中而不必执行:
if(ArrayList1.Contains("Test") || ArrayList2.Contains("Test") || ArrayList3.Contains("Test")) {
}
我不知道是否有办法用循环来做到这一点。
由于
答案 0 :(得分:3)
创建一个包含所有ArrayLists的ArrayList,然后循环遍历它们,就像:
for(ArrayList list : arrays){//arrays contains all your arraylsits, ArrayList1, ArrayList2 ...
return list.contains(value);
}
答案 1 :(得分:2)
将所有ArrayLists的内容放入Set中,然后查询Set。
Set set=new HashSet();
for (ArrayList list: allLists) {
set.addAll(list);
}
...
return set.contains("Test");
实际上,可以使用ArrayList或任何集合代替HashSet,但Hashset.contains
是最快的方法。
答案 2 :(得分:0)
除了像你一样使用if
之外没有多少选择,但是,如果你使用Guava,你可以使用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
答案 3 :(得分:0)
相反,您可以编写自定义ArrayList类,并覆盖包含检查唯一内容的方法。
public class UniqueNamesList extends ArrayList<String> {
@Override
public boolean contains(Object o) {
String inStr = (String)o;
for (String s : this) {
if (inStr.equalsIgnoreCase(s)) return true;
}
return false;
}
}