在Kotlin中将列表划分为元素和其余部分

cl25kdpy  于 2023-03-30  发布在  Kotlin
关注(0)|答案(2)|浏览(159)

我在Kotlin中得到了一个列表,想把这个列表分成一个元素和其他元素。我可以这样做:

val list = listOf(1,2,3,4)
 val (two, others) = list.partition { it == 2 }
 
 print(two.first()) // 2
 print(others)      // [1, 3, 4]

有没有一种方法可以写得更优雅?我正在寻找这样的东西:

// KOTLIN PSEUDO CODE
 val list = listOf(1,2,3,4)
 val (two, others) = list.partition { it == 2 }.mapFirst { it.first() }
 
 print(two)    // 2
 print(others) // [1, 3, 4]
muk1a3rh

muk1a3rh1#

修改@Nikolai的答案,使其为null安全:

val list = listOf(1, 2, 3, 4)

val (two, others) = list
  .partition { it == 2 }
  .let { (f, s) -> f.firstOrNull() to s }

println(two)
println(others)

现在,对于不在 list 中的 it,将返回 null 的值。

8zzbczxx

8zzbczxx2#

您可以使用let扩展转换中间结果

val list = listOf(1,2,3,4)
val (two, others) = list.partition { it == 2 }.let { it.first.first() to it.second }

println(two)
println(others)

输出:

2
[1, 3, 4]

相关问题