如何将流的结果收集到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如何操作一个列表中的对象并将其收集到另一个列表中? [重复]