Peh*_*eje 1 kotlin java-stream
我想我已经陷入困境。由于性能原因,我正在尝试利用Java parallelStream。
函数Specimen.pick()采样并返回Specimen的实例。我想在替换pool时使用parallelStream对此进行并行化。
var pool: Array<Specimen> = Array(100_000) ..
Run Code Online (Sandbox Code Playgroud)
这就是我要在Kotlin中编写的内容:
pool = pool.asList().parallelStream().map { Specimen.pick(pool, wheel, r.split()) }.toArray(Specimen::new)
Run Code Online (Sandbox Code Playgroud)
:: new出现了哪些错误
相反,我不得不在列表和数组之间来回移动:
pool = pool.asList().parallelStream().map { Specimen.pick(pool, wheel, r.split()) }.collect(Collectors.toList()).toTypedArray()
Run Code Online (Sandbox Code Playgroud)
哪个可行,但似乎浪费资源,而不是直接进入Array。如果我让IntelliJ尝试Kotlinize这样的Java示例:
Java:
Person[] men = people.stream()
.filter(p -> p.getGender() == MALE)
.toArray(Person[]::new);
Run Code Online (Sandbox Code Playgroud)
IntelliJ转换:
val men = people.stream()
.filter({ p -> p.getGender() === MALE })
.toArray(Person[]::new /* Currently unsupported in Kotlin */)
Run Code Online (Sandbox Code Playgroud)
所以也许这是科特林来的?还是还有另一种更好的方法?
您不能使用数组构造函数引用,但是可以使用lambda表达式来表示每个方法引用:
.toArray<Person>({length -> arrayOfNulls(length)})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
904 次 |
| 最近记录: |