当我使用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
static
期望引用类型为Stream
元素,因此当您传递基本数组时,唯一可用的引用类型是数组本身。
在System.out.println(Stream.of(b).count());
case, b
是一个引用类型数组,因此static
用于产生3个元素的Stream
。