【发布时间】:2019-12-07 05:13:04
【问题描述】:
我想使用 lambda 映射表达式将 arrayList 字典键的时间值映射到列表。我让它使用双 for 循环来清楚地显示逻辑,而无需利用 Kotlin 方式。
一旦每个 arrayList 至少有一个元素,我就有正确的 lambda 映射,我看到的唯一接近的内置函数是 .filter 但这需要在检查索引之前完成以避免抛出异常
地图(eventData[0] 是时间流逝的地方)
var videoFileMap = mutableMapOf(Types.A to arrayListOf<EventData>(),
Types.B to arrayListOf(),
Types.C to arrayListOf(),
Types.D to arrayListOf())
for循环:
for (videoFileList in videoFileMap) {
for (videoFileData in videoFileList.value) {
timeValues[i] = videoFileData.time - System.currentTimeMillis()
}
}
lambda 不检查(抛出 indexoutofbounds 异常):
timeValues = videoFileMap.values.map{ it[0].time - System.currentTimeMillis() }
并尝试检查大小(需要 ArrayList,收到 Comparable(Double & Int) 和 Number)
timeValues = videoFileMap.values.map{ if (it.size>0) {
it[0].time - System.currentTimeMillis()
} else {-1} }
提前感谢您的功能帮助!
【问题讨论】:
标签: kotlin lambda functional-programming