Java流:计算基元数组中的不同值

Art*_*oom 4 java arrays primitive java-8 java-stream

为什么int数组的非重复计数返回的结果与Integer数组的计数不同?在这两种情况下,我都希望得到3的结果。

int[] numbers1 = { 1, 2, 3 };
System.out.println("numbers1: " + Arrays.toString(numbers1));
System.out.println("distinct numbers1 count: " + Stream.of(numbers1).distinct().count());

Integer[] numbers2 = { 1, 2, 3 };
System.out.println("numbers2: " + Arrays.toString(numbers2));
System.out.println("distinct numbers2 count: " + Stream.of(numbers2).distinct().count());
Run Code Online (Sandbox Code Playgroud)

结果

numbers1: [1, 2, 3]
distinct numbers1 count: 1

numbers2: [1, 2, 3]
distinct numbers2 count: 3
Run Code Online (Sandbox Code Playgroud)

Erw*_*idt 6

在第一种情况下,Stream.of(numbers1)is 的类型为,Stream<int[]>并且其中仅包含一个值。

在第二种情况下,Stream.of(numbers2)is 的类型为Stream<Integer>3,其中有3个不同的值。

您可以IntStream.of(1, 2, 3)用来获取原始流int


And*_*cus 3

因为在第一个Stream.of方法中,将整个数组视为一个元素 - 它创建一个包含数组元素的流。要使用基元数组,您必须使用Arrays.stream