如何将流的结果收集到Java 8中的自定义对象数组中[重复]

Posted

技术标签:

【中文标题】如何将流的结果收集到Java 8中的自定义对象数组中[重复]【英文标题】:How to collect result of a stream into an array of custom object in Java 8 [duplicate] 【发布时间】: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 8 fill array with supplier 【参考方案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() 任何东西。

【讨论】:

以上是关于如何将流的结果收集到Java 8中的自定义对象数组中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 Stream 流 - 收集数据

Java8-用流收集数据

Java 8如何操作一个列表中的对象并将其收集到另一个列表中? [重复]

高效 告别996,开启java高效编程之门 3-16收集器与预定义收集器概述

Java 8 Collectors to Map

如何在 PHP/Eclipse 中对 foreach 循环中从数组中拉出的自定义对象进行智能感知?