为什么这不是一个单一的对象?

问题描述:

简而言之,我试图用流来遍历数组,以确定每个元素是否是相同类型的对象。我已经找到了这样做的两种方法(foo是一个字节数组byte[])。为什么这不是一个单一的对象?

Arrays.asList(foo).parallelStream().allMatch(aByte -> aByte == Byte.MIN_VALUE); 

Stream.of(foo).parallel().allMatch(aByte -> aByte == Byte.MIN_VALUE); 

不过,我不断收到错误"Incompatible operand types byte[] and byte"。这意味着aByte的类型为byte[]。这是为什么?为什么它不只是一个正常的byte?我该如何纠正这个问题?

+1

他们有'IntStream.of(int ...)',但没有'ByteStream' :) ... – ZhongYu

+0

将'foo'转换为'Byte []'。 – bcsb1001

如果foo的类型为byte[],则Arrays.asList(foo)将返回包含单个元素的列表:foo

它将返回一个包含foo的所有元素的列表,foo是对象数组。但事实并非如此,因为字节是原始类型,而不是对象。而byte []因此不是Object []。

你应该使用的实际上是IntStream。有关如何将字节数组转换为IntStream,请参见What is the best way to convert a byte array to an IntStream?

请注意,使用并行流进行这样一个简单的任务并不是一个好主意。除非字节数组非常庞大并且只包含Byte.MIN_VALUE,否则并行数据流的开销会使事情变得更慢。