【问题标题】:toArray on Stream of String returns Object[]字符串流上的 toArray 返回 Object[]
【发布时间】:2018-10-19 23:44:48
【问题描述】:

我有这个代码:

Stream<String> stringStream = Stream.of("a", "b", "c");
Object[] arr = stringStream.toArray();

为什么arr 不是String[]

【问题讨论】:

  • Java 无法根据调用的返回值推断泛型类型。
  • 数组也很奇怪,因为它们会在运行时记住它们的项目类型并检查它。因此,如果 toArray() 不知道它应该创建什么类型的数组,它就只能创建 Object[]
  • @GBlodgett 这是关于Streams,而不是Lists。
  • 尝试将toArray()方法实现为泛型,看看是否可以。

标签: java arrays generics


【解决方案1】:

Stream 的 toArray 函数自然会返回一个Object[]

这是函数的签名:

<A> A[] toArray(IntFunction<A[]> generator)

您可能会注意到有一个 generator 作为参数。
IntFunction&lt;A[]&gt; generator 的目的是将一个整数,即数组的大小,转换为一个新的数组。

要获得String[],您可以这样做:

Stream<String> stringStream = Stream.of("a", "b", "c");
String[] arr = stringStream.toArray(size -> new String[size]);

更多信息可以咨询Docs

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 2023-03-14
    • 2019-08-11
    • 2016-10-27
    • 1970-01-01
    • 2020-07-02
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多