简单地说,我尝试使用流迭代数组,以查明每个元素是否都是同一类型的对象。我已经想出了两种方法来做到这一点( 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 是原始类型,而不是对象。因此 byte[] 不是 Object[]。
实际上您应该使用的是IntStream
。请参阅What is the best way to convert a byte array to an IntStream?了解如何将字节数组转换为 IntStream。
请注意,使用并行流来完成如此简单的任务并不是一个好主意。除非字节数组非常大并且仅包含 Byte.MIN_VALUE,否则并行流相对于顺序流的开销会使速度变慢。
关于java - 为什么这个 lambda 不是一个单一对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32405665/