java - 为什么这个 lambda 不是一个单一对象?

标签 java arrays lambda java-8 java-stream

简单地说,我尝试使用流迭代数组,以查明每个元素是否都是同一类型的对象。我已经想出了两种方法来做到这一点( 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/

相关文章:

java - 如何在OpenGL中移动2D相机

c# - 如何对工作日数组进行排序,以便它们显示为日历周(在 C# 中)?

c++ - 是否必须重置 std::array 元素?

python - 为什么 help(lambda) 给出 SyntaxError : invalid syntax

c# - 我如何存储和重用我的 lambda 表达式片段

list - 方案:如何检查列表的所有元素是否相同

java - 如何使用 JSP 和 Servlet 中的 Web 应用程序域名 URL 显示存储在同一 Web 服务器上的 Web 应用程序文件夹外部的文件?

java - Robolectric 的阴影对象和模拟

arrays - VBA 数组和字符串错误

java - 包含 Applet 的窗口