为什么这不是一个单一的对象?
问题描述:
简而言之,我试图用流来遍历数组,以确定每个元素是否是相同类型的对象。我已经找到了这样做的两种方法(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
?我该如何纠正这个问题?
答
如果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,否则并行数据流的开销会使事情变得更慢。
他们有'IntStream.of(int ...)',但没有'ByteStream' :) ... – ZhongYu
将'foo'转换为'Byte []'。 – bcsb1001