首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin和parallelStream toArray

Kotlin和parallelStream toArray
EN

Stack Overflow用户
提问于 2017-09-03 12:53:09
回答 1查看 2.4K关注 0票数 2

我想我被排挤了。出于性能方面的原因,我试图使用。

一个函数Specimen.pick()采样并返回一个样本实例。我想在替换池时用parallelStream来平分这一点。

代码语言:javascript
复制
var pool: Array<Specimen> = Array(100_000) .. 

这就是我在Kotlin试图写的:

代码语言:javascript
复制
pool = pool.asList().parallelStream().map { Specimen.pick(pool, wheel, r.split()) }.toArray(Specimen::new)

哪些错误出现在::new上

相反,我必须在列表和数组之间来回切换:

代码语言:javascript
复制
pool = pool.asList().parallelStream().map { Specimen.pick(pool, wheel, r.split()) }.collect(Collectors.toList()).toTypedArray()

这是可行的,但似乎是资源浪费,而不是直接转到Array。如果我让IntelliJ尝试对这方面的一个Java示例进行Kotlinize化:

爪哇:

代码语言:javascript
复制
Person[] men = people.stream()
                      .filter(p -> p.getGender() == MALE)
                      .toArray(Person[]::new);

IntelliJ转换:

代码语言:javascript
复制
val men = people.stream()
            .filter({ p -> p.getGender() === MALE })
            .toArray(Person[]::new  /* Currently unsupported in Kotlin */)

也许这是给Kotlin的?或者还有其他更好的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-03 13:11:25

不能使用数组构造函数引用,但每个方法引用都可以使用lambda表达式表示:

代码语言:javascript
复制
.toArray<Person>({length -> arrayOfNulls(length)})
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46023602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档