最近我一直在使用Arrow Kotlin,但是我仍然对如何将选项列表映射到它们的值感到困惑。例如:
val listOfStrings: List<String> = listOf<Option<String>>().map { /* ? */ }
目前,我正在这样做:
val listOfStrings: List<String> = listOf<Option<String>>().filter { it.isDefined() }.map { it.getOrElse { "" } }
但是感觉很笨拙,我肯定会丢失一些东西。
我个人认为Kotlin的nullable支持能够以箭头Option更大的宽限度处理nullable,请选中blogpost,说有些替代方法是:
listOf<Option<String>>().mapNotNull { it.orNull() }
listOf<Option<String>>().flatMap { it.toList() }
listOf<Option<String>>().mapNotNull { if (it is Some) it.t else null }
如果要从Option
中提取值,则需要提供默认值,以防该值为缺少。
在第二行代码中,您为此使用getOrElse
。这是正确的,并且具有fun <A> Option<A>.getOrElse(f: () -> A): A
的签名,表示它返回present值,或者在absence的情况下返回默认值。
解决方案:您可以使用map
简单地将Option
中的每个List
的getOrElse
设置为一个值。
`val listOfStrings:List = listOf>()。map {it.gerOrElse {“”}}````