我试图查看我的数组中的某个元素是否包含在我的其他数组中。我不想为此使用嵌套for循环,我很好奇为什么我的.contains
不起作用。
目前我有两个数组
double [] s2 = new double [4];
double [] match = new double [s2.length];
我正在尝试测试s2
是否包含match
数组中的任何值
for (j = 0; j < s2.length; j++)
{
if(Arrays.asList(s2).contains(match[j])){
return true;
}
}
这与我使用的双数据类型有关吗?如果是这样,我仍然可以使用.contains
?
答案 0 :(得分:2)
解决具体问题:Arrays.asList
不会创建List
个元素,只会创建一个List
个元素:您的double[]
个元素(在索引0处) 。您应该自己遍历列表以进行第二次for
循环,而不是创建不同的对象。
可以使用Stream
操作(java-8)而不是使用循环来完成,但差异应该是最小的。
DoubleStream.of(s2) // Pipe the source array
.distinct() // Remove duplicate elements
// as they only need to be matched against once
.anyMatch(value -> // Consider if any value matches this condition
IntStream.of(match) // It equals any value in "match"
.distinct() // after removing duplicate elements
.anyMatch(matchValue -> matchValue == value));
有关Streams的其他信息 - 请参阅以下Oracle文章:使用Java SE 8流处理数据Part 1,Part 2
答案 1 :(得分:1)
问题是Arrays.asList(s2)
没有像您期望的那样返回List<Double>
个对象。
它返回一个List<double[]>
对象。因此,该数组中的元素将是double[]
类型。
泛型不能很好地处理原始类型。
解决方案是将double[]
转换为某个地方的Double[]
。