当我使用Java 8 Stream.of原始类型时,结果很混乱

byte[] a = {1,2,3}; System.out.println(Stream.of(a).count()); Byte[] b = {1,2,3}; System.out.println(Stream.of(b).count()); 

结果是1和3,为什么?

Stream.of仅接受对象作为其参数。 byte不是Object,而是byte数组。 如果a是一个byte数组,那么Stream.of(a)只能表示“这个对象的流,这是一个数组”。

如果你有一个Byte[]数组,那么数组的每个元素都是一个对象,所以编译器可以猜到你的意思。

这里有关于如何流式传输字节数组的信息: 在Java 8中,是否有ByteStream类?

对于原始数组,您应该使用原始流,但不幸的是没有ByteStream 。 如果将byte[]更改为int[] ,则可以编写:

 int[] a = {1,2,3}; System.out.println(IntStream.of(a).count()); 

否则你得到一个Stream其单个元素是输入数组,因为static Stream of(T t) static Stream of(T... values)期望引用类型为Stream元素,因此当您传递基本数组时,唯一可用的引用类型是数组本身。

System.out.println(Stream.of(b).count()); case, b是一个引用类型数组,因此static Stream of(T... values)用于产生3个元素的Stream