1

我的数据类中有以下类型的值

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) {
......

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

4

2 回答 2

2
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 }
于 2020-05-08T17:37:08.530 回答
1
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>>

于 2020-05-08T17:18:17.947 回答