【问题标题】:Empty check in lambda mapping to avoid indexOutOfBounds空检查 lambda 映射以避免 indexOutOfBounds
【发布时间】: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


    【解决方案1】:

    这个怎么样?

    val timeValues = videoFileMap.values.mapNotNull { it.firstOrNull() }
            .map { it.time - System.currentTimeMillis() }
    

    【讨论】:

      猜你喜欢
      • 2013-07-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 2021-04-05
      • 1970-01-01
      相关资源
      最近更新 更多