将选项列表映射到字符串列表

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

最近我一直在使用Arrow Kotlin,但是我仍然对如何将选项列表映射到它们的值感到困惑。例如:

val listOfStrings: List<String> = listOf<Option<String>>().map { /* ? */ }

目前,我正在这样做:

val listOfStrings: List<String> = listOf<Option<String>>().filter { it.isDefined() }.map { it.getOrElse { "" } }

但是感觉很笨拙,我肯定会丢失一些东西。

kotlin optional arrow-kt
2个回答
1
投票

我个人认为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 }

0
投票

如果要从Option中提取值,则需要提供默认值,以防该值为缺少

在第二行代码中,您为此使用getOrElse。这是正确的,并且具有fun <A> Option<A>.getOrElse(f: () -> A): A的签名,表示它返回present值,或者在absence的情况下返回默认值。

解决方案:您可以使用map简单地将Option中的每个ListgetOrElse设置为一个值。

`val listOfStrings:List = listOf>()。map {it.gerOrElse {“”}}````

© www.soinside.com 2019 - 2024. All rights reserved.