作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在为我的应用问题寻找解决方案时遇到了一些困难。
我的应用程序正在生成包含一百万个点的图表,为此我正在保存一个字符串,其中所有点都由房间数据库中的空格分隔。
话虽这么说,我正在加载这个点字符串,将其拆分并使用 mapIndex 为所有点添加索引,如下所示:
val map = mutableMapOf<Float, Float>()
signal.split(" ").mapIndexed { index, signal ->
signal.toFloatOrNull()?.let { floatSignal ->
map[index.toFloat()] = floatSignal
}
}
使用这段代码我可以在图表上显示所有点,但是这个操作 mapIndexed 在处理一百万个点(超过三秒)时太慢了
我的问题是,有没有办法在多线程上拆分 mapIndexed 然后加入结果?对不起,如果它有点难以理解,我不是母语人士
最佳答案
您可以结合使用 chunked
和协程:
chunked
将列表分成几部分async
启动一个新的协程awaitAll
等待协程完成flatten
将 Pairs
的 block 合并到一个列表中toMap
将对列表转换为新的 Map
请注意,runBlocking
仅用作创建协程作用域的示例。
runBlocking(Dispatchers.Default) {
val chunkSize = 10000
val map = signal.split(" ").chunked(chunkSize).mapIndexed { chunkIndex, chunk ->
async {
chunk.mapIndexedNotNull { index, signal ->
signal.toFloatOrNull()?.let { floatSignal ->
(chunkIndex * chunkSize + index).toFloat() to floatSignal
}
}
}
}.awaitAll().flatten().toMap()
}
关于android - 我可以在多个线程中从 kotlin 集合中拆分 mapIndexed 工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55112801/
我在为我的应用问题寻找解决方案时遇到了一些困难。 我的应用程序正在生成包含一百万个点的图表,为此我正在保存一个字符串,其中所有点都由房间数据库中的空格分隔。 话虽这么说,我正在加载这个点字符串,将其拆
根据 reflect 文档 reflect.Value.MapIndex() 应返回一个 reflect.Value,它表示存储在 map 特定键处的数据的值.所以我的理解是以下两个表达式应该是相同的
我是一名优秀的程序员,十分优秀!