丢弃Kotlin箭头中的嵌套选项



我的数据类中有一个类型如下的值

Option<Option<List<Pair<String, Option<String>>>>>

如何访问最右边的Option<Sring>。我试过用下面这样的表达

when(Option<Option<List<Pair<String, Option<String>>>>>) {
is Some -> when(Option<Option<List<Pair<String, Option<String>>>>>.t) {
is Some -> when(Option<List<Pair<String, Option<String>>>>.t) {
......

但看起来不太好。有没有其他方法可以抛弃那些选项

val t: Option<Option<List<Pair<String, Option<String>>>>> =
Some(Some(listOf(
Pair("a", Some("A")),
Pair("b", Some("B")),
Pair("c", None)
)))
val l = t.flatten()
.map { list ->
list.map { pair -> pair.second }
}
.getOrElse { emptyList() }
val first = l.getOrElse(0) { None }
val second = l.getOrElse(1) { None }
val missing = l.getOrElse(7) { None }
nested  // Option<Option<List<Pair<String, Option<String>>>>>
.flatten() // Option<List<Pair<String, Option<String>>>>
.map { it.map { it.second() } } // Option<List<Option<String>>>
.sequence(Option.applicative()) // Option<Option<List<String>>>
.flatten() // Option<List<String>>

flatten去掉了嵌套选项,sequenceList<Option<A>>变成了Option<List<A>>

相关内容

  • 没有找到相关文章

最新更新