为什么这个 lambda 不是一个单一的对象?
Why isn't this lambda a singular object?
简单地说,我正在尝试使用流遍历数组以查明每个元素是否都是同一类型的对象。我想出了两种方法(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)
将 return 一个包含单个元素的列表:foo
.
它将 return 包含 foo
的所有元素的列表是 foo 是一个对象数组。但事实并非如此,因为 byte 是原始类型,而不是 Object。因此 byte[] 不是 Object[].
实际上你应该使用的是IntStream
。请参阅 了解如何将字节数组转换为 IntStream。
请注意,为这样一个简单的任务使用并行流并不是一个好主意。除非字节数组非常大并且仅包含 Byte.MIN_VALUE,否则并行流的开销超过顺序流会使速度变慢。
简单地说,我正在尝试使用流遍历数组以查明每个元素是否都是同一类型的对象。我想出了两种方法(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)
将 return 一个包含单个元素的列表:foo
.
它将 return 包含 foo
的所有元素的列表是 foo 是一个对象数组。但事实并非如此,因为 byte 是原始类型,而不是 Object。因此 byte[] 不是 Object[].
实际上你应该使用的是IntStream
。请参阅
请注意,为这样一个简单的任务使用并行流并不是一个好主意。除非字节数组非常大并且仅包含 Byte.MIN_VALUE,否则并行流的开销超过顺序流会使速度变慢。