Ce face listOfNotNull
listOfNotNull(a, b, c) seamănă cu listOf, dar lasă deoparte orice valoare null. Tipul rezultatului nu mai are semnul întrebării: din String? obții List<String>.
Este util când construiești o listă din câmpuri opționale: un număr de telefon secundar, o adresă de livrare care poate lipsi. Cu un singur argument, întoarce o listă cu un element sau o listă goală.
Parametri
| Parametru | Descriere |
|---|---|
elemente |
Valori care pot fi null. |
Ce returnează
List<T> doar cu valorile diferite de null, în ordinea dată.
Exemple
Exemplul 1: Telefoane opționale
Al doilea telefon lipsește (null), așa că lista are doar două elemente.
fun main() {
val mobil: String? = "0722 111 222"
val serviciu: String? = null
val acasa: String? = "0232 123 456"
val telefoane = listOfNotNull(mobil, serviciu, acasa)
println(telefoane)
println("Avem ${telefoane.size} numere")
}
Rezultat
[0722 111 222, 0232 123 456]
Avem 2 numere
Exemplul 2: Un singur element opțional
Cu un singur argument, rezultatul are un element sau niciunul. Așa se poate adăuga ușor o valoare opțională la o listă.
fun etichete(oras: String, judet: String?): List<String> =
listOf(oras) + listOfNotNull(judet)
fun main() {
println(etichete("Iași", "IS"))
println(etichete("București", null))
}
Rezultat
[Iași, IS]
[București]
Greșeli frecvente
- Folosești
listOf(a, b)cu valori nule și obțiiList<String?>cunullîn ea. Dacă nu vrei valorile lipsă, alegelistOfNotNullsaufilterNotNull().
Comenzi înrudite
Iterable.filterNotNull: Întoarce o listă nouă fără elementele null; tipul rezultatului nu mai permite null.listOf: Creează o listă din elementele date: listOf pentru citire, mutableListOf și arrayListOf pentru o listă pe care o modifici.Iterable.mapNotNull: Aplică o funcție fiecărui element și păstrează doar rezultatele care nu sunt null; firstNotNullOf întoarce primul astfel de rezultat.