【问题标题】:when i use Java 8 Stream.of primitive type, the result is confused当我使用 Java 8 Stream.of 原始类型时,结果很混乱
【发布时间】:2016-10-25 09:30:09
【问题描述】:
    byte[] a = {1,2,3};
    System.out.println(Stream.of(a).count());

    Byte[] b = {1,2,3};
    System.out.println(Stream.of(b).count());

结果是1和3,为什么?

【问题讨论】:

  • 一种创建字节流的方法可以找到here

标签: java java-8 java-stream


【解决方案1】:

Stream.of 只接受对象作为其参数。 byte 不是对象,但 byte 数组是。如果abyte的数组,那么Stream.of(a)只能表示“这个对象的流,是一个数组”。

如果你有一个Byte[] 数组,那么数组的每个元素都是一个对象,所以编译器可以猜到你的意思。

这里有关于如何流式传输字节数组的信息: In Java 8, is there a ByteStream class?

【讨论】:

  • @yijiang 会的。
  • 但是你的解释对我有帮助,3Q。
【解决方案2】:

对于原始数组,您应该使用原始流,但不幸的是没有ByteStream。如果您将byte[] 更改为int[],您可以这样写:

int[] a = {1,2,3};
System.out.println(IntStream.of(a).count());

否则你会得到一个Stream<byte[]>,它的单个元素是输入数组,因为static<T> Stream<T> of(T t)static<T> Stream<T> of(T... values)都期望引用类型作为Stream元素,所以当你传递一个原始数组时,唯一可用的引用type 是数组本身。

在您的 System.out.println(Stream.of(b).count()); 案例中,b 是一个引用类型数组,因此 static<T> Stream<T> of(T... values) 用于生成包含 3 个元素的 Stream<Byte>

【讨论】:

  • @yijiang 我错过了。没想到byte[]不能自动转换成int[]。我会编辑答案。
  • 3Q 为您解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
相关资源
最近更新 更多