让f()
返回一个可为空的值。null to listOf(),not null to listOf(value)in Kotlin in one liner?
我想要做的是,
如果f()
为空,得到一个空列表,
否则,如果f()
不为空,获得单项value
的列表。
在Scala中,我们可以做这样的事情:
Option(f()).toList
以上冗长
Option(f()).map(v => List(v)).getOrElse(List.empty)
在科特林,没有Option
(假设没有Funktionale库),以及空没有toList()
不像(None: Option
)在斯卡拉。
我们有埃尔维斯操作,但空将是listOf()
功能里面,所以这将是
listOf(f() ?: /* What can I do here? */)
我们要为空是什么listOf(/*no argument */)
,但猫王运营商需要一个参数,所以listOf(f() ?:)
将导致在编译错误。
至少我们可以做
val v = f()
if (v == null) listOf() else listOf(v)
,但它是一个两个衬垫。
这是否有一些表达?
在哪里,我会用这句话是在类的主构造默认参数,因此,如果它不是一个衬垫,它会用括号括起来,所以是这样的:
class A(
val p1: List<V> = run {
val v = f()
if (v == null) listOf() else listOf(v)
},
val p2: ... = ...,
...)
这看起来相当丑,不是吗?