Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在尝试将两个数组与arrays.contains Java进行比较_Java_Arrays_Contains_Java 8 - Fatal编程技术网

正在尝试将两个数组与arrays.contains Java进行比较

正在尝试将两个数组与arrays.contains Java进行比较,java,arrays,contains,java-8,Java,Arrays,Contains,Java 8,我试图查看数组中的元素是否包含在其他数组中。我不想为此使用嵌套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).co

我试图查看数组中的元素是否包含在其他数组中。我不想为此使用嵌套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;
            }
       }
for(j=0;j

这与我使用的双数据类型有关吗?如果是这样的话,我还有什么办法可以使用
.contains

问题在于
数组。asList(s2)
不会像您预期的那样返回
List
对象

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

泛型不能很好地处理基元类型


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

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


它可以通过操作()来完成,而不是使用循环,尽管差别应该很小

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));

有关流的更多信息,请参阅以下Oracle文章:使用Java SE 8流处理数据,

您不想使用嵌套循环的任何特定原因?您使用的是嵌套循环,您只是通过
contains
间接使用(并且在每次传递时为
s2
创建一个新的列表包装器)有趣的是,我现在不知道@chrylis,那么这会给我一个运行时间O(n^2)吗?因为它现在将是一个运行n次的嵌套循环。您想检查
s2
中的任何元素是否在
匹配中?还有其他一些更好的big-O替代方案,例如先排序一个,但常数通常会下降,而只会循环两次。作为解决方案,用户应该使用
数组。asList
@Unihedron不起作用。asList不会接受那样的
double[]
。编译错误:)啊,你是对的,我认为参数会适应是错误的。我的错!