Arrays.asList(int [])不起作用

Hen*_*Zhu 24 java arrays list

当我运行以下代码时,不会打印输出.

int[] array = {3, 2, 5, 4};

if (Arrays.asList(array).contains(3))
{
    System.out.println("The array contains 3");
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 54

当您将一个基元数组(int[]在您的情况下)传递给Arrays.asList它时,它会创建一个List<int[]>包含单个元素的数组 - 数组本身.因此contains(3)返回false.contains(array)会回归真实.

如果您将使用Integer[]而不是int[],它将起作用.

Integer[] array = {3, 2, 5, 4};

if (Arrays.asList(array).contains(3))
{
  System.out.println("The array contains 3");
}
Run Code Online (Sandbox Code Playgroud)

进一步解释:

签名asListList<T> asList(T...).基元不能替换泛型类型参数.因此,当您传递给此方法时int[],整个int[]数组将替换T并获得一个List<int[]>.另一方面,当您传递Integer[]给该方法时,Integer替换T并获得一个List<Integer>.


Mak*_*oto 17

在Java 8中,您根本不需要转换数组; 只需将其转换为流Arrays#stream,然后使用anyMatch谓词查看所需的值是否包含在数组中.

int[] array = {3, 2, 5, 4};

if (Arrays.stream(array).anyMatch(x -> x == 3)) {
    System.out.println("The array contains 3");
}
Run Code Online (Sandbox Code Playgroud)