试图用Arrays.contains Java比较两个数组

时间:2016-11-30 03:54:36

标签: java arrays contains

我试图查看我的数组中的某个元素是否包含在我的其他数组中。我不想为此使用嵌套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

2 个答案:

答案 0 :(得分:2)

解决具体问题:Arrays.asList不会创建List个元素,只会创建一个List个元素:您的double[]个元素(在索引0处) 。您应该自己遍历列表以进行第二次for循环,而不是创建不同的对象。

可以使用Stream操作()而不是使用循环来完成,但差异应该是最小的。

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 1Part 2

答案 1 :(得分:1)

问题是Arrays.asList(s2)没有像您期望的那样返回List<Double>个对象。

它返回一个List<double[]>对象。因此,该数组中的元素将是double[]类型。

泛型不能很好地处理原始类型。

解决方案是将double[]转换为某个地方的Double[]