如何检查ArrayList<int[]>
是否包含给定的数组[x,y]?我找到了the same question in c#,但找不到Java的任何答案。
目前,我正在使用myList.contains(myArray)
,但它总是评估为false,出于与C#类似的原因,我认为。 C#中的解决方案是使用LINQ,这在Java中不存在。
还有另一种方法可以执行此操作吗?还是我必须编写自己的子例程以提取每个列表元素的值并手动比较它们?
编辑:我已经编写了自己的子例程来执行此操作(假设每个数组都有两个元素),但是希望能找到更优雅的解决方案
private boolean contains(List<int[]> list, int[] array) {
for (int[] listItem : list) {
if (listItem[0] == array[0] &&
listItem[1] == array[1]) {
return true;
}
}
return false;
答案 0 :(得分:0)
.contains
方法将每个对象与.equals
进行比较,this答案指出,该对象只是比较数组对象的身份(即检查它们是否是相同的Java对象),它不比较数组的内容。
您需要做的是编写一个for循环,用Arrays.equals(..)
(比较数组的内容)检查每个元素。例如:
boolean found = false;
for (int i = 0; i < myList.size(); i++)
if (Arrays.equals(myArray, myList.get(i)) found = true;
答案 1 :(得分:0)
有Arrays.equals
和Stream
,它们是为与LINQ类似的用例而设计的。在这种情况下,Stream.anyMatch
方法与LINQ中的Any
非常相似。
将这两种方法结合起来,可以在一个语句中编写方法:
private boolean contains(List<int[]> list, int[] array) {
return list.stream()
.anyMatch(x -> Arrays.equals(x, array));
}