Путь Котлина в условных потоках - PullRequest
0 голосов
/ 03 мая 2018

Каков наилучший способ котлина иметь следующую логику?

      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 голосов
/ 03 мая 2018

В вашем вопросе отсутствуют некоторые детали, но, вероятно, что-то вроде этого:

val date = it.records[0]?.fields["lastModifiedDate"]?.let { RECORD_DATA_LAST_MODIFIED_DATE.parse(it)} ?: Date(0)
0 голосов
/ 03 мая 2018

Поскольку вы не предоставили весь код, необходимый для запуска вашего кода, я решил создать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...