45

activitiestypeの変数があるとしますList<Any>?。リストが null でも空でもない場合は、何かを行いたいと考えています。それ以外の場合は、別のことを行いたいと考えています。私は次の解決策を思いつきました:

when {
    activities != null && !activities.empty -> doSomething
    else -> doSomethingElse
}

Kotlinでこれを行うためのより慣用的な方法はありますか?

4

9 に答える 9

44

アップデート:

kotlin 1.3 提供開始isNullOrEmpty

https://twitter.com/kotlin/status/1050426794682306562


これを試して!非常に明確な。

var array: List<String>? = null
if (array.orEmpty().isEmpty()) {
    // empty
} else {
    // not empty
}
于 2018-01-02T06:26:01.233 に答える
5

他の回答に加えて、 safe-call 演算子を拡張メソッドと組み合わせて使用​​することもできますisNotEmpty()。安全な呼び出しのため、戻り値は実際には、またはのBoolean?いずれかになります。or句で式を使用するには、次のように明示的に確認する必要があります。truefalsenullifwhentrue

when {
    activities?.isNotEmpty() == true -> doSomething
    else -> doSomethingElse
}

elvis 演算子を使用した代替構文:

when {
    activities?.isNotEmpty() ?: false -> doSomething
    else -> doSomethingElse
}
于 2016-05-16T09:26:26.043 に答える
3

?.forEach必要に応じて使用を検討してください

activities?.forEach {
  doSmth(it)
}

あなたが説明した動作が正確に必要な場合、あなたのバリアントは、私が考えることができるより簡潔なものよりも読みやすいと思います。(それでもシンプルifで十分です)

于 2014-10-15T13:43:32.990 に答える
0

私の場合、価格はオプションですorEmpty()。指定された配列がnullの場合は、指定された配列または空の配列を返す次の方法でケースを処理します。

val safeArray  = poi.prices.orEmpty()
if (!safeArray.isEmpty()) {
   ...
}
于 2018-11-22T11:55:52.110 に答える