Kotlin在条件流中的方式

时间:2018-05-03 00:02:34

标签: kotlin

拥有以下逻辑的最佳kotlin方式是什么?

      if (it.records.isNotEmpty()) {
        if (it.records[0].fields.isNotEmpty()) {
          if (it.records[0].fields["lastModifiedDate"] != null) {
            RECORD_DATA_LAST_MODIFIED_DATE_FORMAT.parse(
                it.records[0].fields["lastModifiedDate"])
          } else {
            Date(0)
          }
        } else {
          Date(0)
        }
      } else {
        Date(0)
      }

2 个答案:

答案 0 :(得分:1)

由于您没有提供运行代码所需的所有代码,因此我决定创建2个类和一个函数

data class Musician(
    val records: List<Record>
)

data class Record(
    val fields: Map<String, String>
)

fun test(mus: Musician): Date { }

只有使用elvis运算符和一些常用语法,你才能得到类似的东西:

fun test(mus: Musician): Date {
    val sdf = SimpleDateFormat("dd/MM/yyyy")

    return if(mus.records.isNotEmpty() && 
mus.records[0].fields.isNotEmpty())
        sdf.parse(mus.records[0].fields["lastModifiedDate"]) ?: Date(0)
    else
        Date(0)
}

如果你想使用更多Kotlin有趣的东西,你可以创建一些像:

fun test(mus: Musician): Date {
    val sdf = SimpleDateFormat("dd/MM/yyyy")

    return mus.records.firstOrNull()?.fields?.get("lasModifiedDate")?.let { 
        sdf.parse(it) 
    } ?: Date(0)
}

这可能不是处理这种情况的最佳方法,但这些是你可以用Kotlin做的一些选择

答案 1 :(得分:0)

您的问题缺少一些细节,但可能是这样的:

val date = it.records[0]?.fields["lastModifiedDate"]?.let { RECORD_DATA_LAST_MODIFIED_DATE.parse(it)} ?: Date(0)