在Kotlin中将元素添加到列表ifNotEmpty()的大多数惯用方式

问题描述 投票:1回答:2

我想在List<Thing>前面加上一个元素,但前提是列表不为空。

我正在考虑takeIf { it.isNotEmpty() }orEmpty()flatMap的组合。

在Kotlin中最惯用的方法是什么?

list kotlin idioms
2个回答
0
投票
val myEmptyList = listOf<String>() val myNotEmptyList = listOf<String>("is", "the", "worst") listOf("first").takeIf { myEmptyList.isNotEmpty() }.orEmpty() + myEmptyList listOf("first").takeIf { myNotEmptyList.isNotEmpty() }.orEmpty() + myNotEmptyList

输出:

[]
[first, is, the, worst]

0
投票
infix fun <T> Collection<T>?.prependIfNotEmpty(other: Collection<T>): Collection<T>? = if (this?.isNotEmpty() == true) other + this else this // or for non nullable lists your approach infix fun <T> Collection<T>.prependIfNotEmptyNonNull(other: Collection<T>): Collection<T> = other.takeIf { isNotEmpty() }.orEmpty() + this

用法

listOf(1, 2, 3) prependIfNotEmpty listOf(-1, 0) // [-1,0,1,2,3]

listOf("two", "three", "four").prependIfNotEmpty(listOf("zero", "one")) // ["zero", "one", "two", "three", "four"]

val list: List<Float>? = null

list prependIfNotEmpty listOf(3.5, 5.6) // null

//for prependIfNotEmptyNonNull the same usage

也许还有一种更惯用的方式,但是我仍然没有弄清楚。

希望有帮助。
© www.soinside.com 2019 - 2024. All rights reserved.