Kotlin和parallelStream来阵列

我觉得我越来越偏向了。 我正在尝试利用Java parallelStream出于性能原因。

函数Specimen.pick()采样并返回一个Specimen的实例。 我想用parallelStream在更换时将其并行化。

var pool: Array<Specimen> = Array(100_000) .. 

这就是我在Kotlin写的:

 pool = pool.asList().parallelStream().map { Specimen.pick(pool, wheel, r.split()) }.toArray(Specimen::new) 

哪些错误出来::新

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

 pool = pool.asList().parallelStream().map { Specimen.pick(pool, wheel, r.split()) }.collect(Collectors.toList()).toTypedArray() 

哪些工作,但似乎资源浪费,而不是直接进入阵列。 如果我让IntelliJ尝试Kotlinize这个Java的例子:

Java的:

 Person[] men = people.stream() .filter(p -> p.getGender() == MALE) .toArray(Person[]::new); 

IntelliJ转换:

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

所以也许这是为了Kotlin? 还是有更好的办法?

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

 .toArray<Person>({length -> arrayOfNulls(length)})