【问题标题】:How to collect result of a stream into an array of custom object in Java 8 [duplicate]如何将流的结果收集到Java 8中的自定义对象数组中[重复]
【发布时间】:2019-09-19 11:33:01
【问题描述】:

我有一个List<TestBuilder> testBuilders; Test 有一个 Test 类型的函数构建

我做了testBuilders.stream().map(Test::build()).collect()

我想在array of Test i.e Test[]上面收集

我不确定collect function会发生什么

【问题讨论】:

  • 不是很相关,但是:您确定要获得测试构建器列表吗?一个构建器应该只产生一个测试,还是一个构建器应该产生 N 个测试?如果一个构建器应该生成 N 个测试,您可以使用类似 Stream.generate(someSingleTestBuilder::build).limit(N).toArray(Test[]::new); 的代码

标签: java arrays java-8 java-stream


【解决方案1】:

使用终端操作Stream::toArray 将项目序列打包到一个数组中。但是,您必须定义一个提供的生成器IntFunction<A[]> 来分配返回数组的类型:

Test[] array = testBuilders.stream().map(Test::build).toArray(size -> new Test[size]);

lambda 表达式size -> new Test[size] 应替换为方法引用:

Test[] array = testBuilders.stream().map(Test::build).toArray(Test[]::new);

【讨论】:

    【解决方案2】:

    你可以使用

    whatever.stream().toArray(WhatEverClass[]::new);
    

    根据该类型对象的“任意”流为WhatEverClass 类型的对象创建一个数组。因此:不需要collect() 任何东西。

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多