【问题标题】:Why isn't this lambda a singular object? [duplicate]为什么这个 lambda 不是一个奇异对象? [复制]
【发布时间】:2015-09-04 19:56:38
【问题描述】:

简单地说,我正在尝试使用流对数组进行迭代,以确定每个元素是否都是相同类型的对象。我想出了两种方法(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?我该如何解决这个问题?

【问题讨论】:

  • 他们有IntStream.of(int...),但没有ByteStream :) ...
  • foo 转换为Byte[]

标签: java arrays lambda java-8 java-stream


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多