首先我创建了字符串的ArrayList:
List<List<String>> array1 = new ArrayList<List<String>>();
然后用数据填充它并进行打印:
[John, Smith, 120]
[Albert, Einstein, 170]
现在我想在列表中循环并与说String[] array2 = {"Albert", "Einstein", "170"}
进行比较,到目前为止我已尝试过:
if (array1.get(i).equals(array2)) { blah }
然而这不起作用,我基本上想要遍历arraylist并找到我的array2是否得到匹配。我怎样才能做到这一点?
答案 0 :(得分:8)
简单的列表不等于数组。最简单的解决方法是首先将数组包装在列表中:
if (array1.get(i).equals(Arrays.asList(array2))
然后使用equals
实现,它只对每个项执行顺序相等检查。
如果您只是想找到第一个匹配条目,那么根据路易斯的回答使用indexOf
也会有效。
我还强烈建议您不在变量array1
不是数组时调用它。
最后,如果您使用List<String>
作为包装器以避免必须创建具有(例如)名称和年龄的真实数据结构,则不要:创建一个Person
课程,所以你最终得到:
List<Person> people = new ArrayList<Person>();
Person testPerson = new Person("Albert", "Einstein", 170);
...适当地实现平等和散列,你会很高兴。您的代码 更易于阅读和维护。
答案 1 :(得分:2)
return listOfListsOfStrings.indexOf(Arrays.asList(arrayOfStrings));
会查明列表中是否存在该阵列的匹配项。如果第i个列表与数组匹配,则返回i;如果未找到匹配,则返回-1。您甚至不需要for
循环。
答案 2 :(得分:1)
根据您给出的示例,两者都是列表。因此,尝试使用list1.containsAll(list2),即conatinsAll方法。希望它有所帮助
这里还有一个例子Have I found a bug in java.util.ArrayList.containsAll?