所以我有一个字符串,我想检查是否应分成两部分,或返回一些默认值。喜欢这个:
val myString = "firstPart-secondPart"
val (first, second) = when (myString.contains("-")) {
true -> myString.split('-', limit = 2)
else -> ?? <-- How would i return ("Default1", "Default2") so the destructuring still works?
}
所以我的问题是,我如何返回两个默认字符串,以便解构工作?我用过 String.split()
之前为了解构而且非常好。
如何返回2个用于解构的值
您需要返回与上述类型匹配的类型,split返回一个列表,因此您可以使用:
listOf("Default1", "Default2")
完整代码
val myString = "firstPart-secondPart"
val (first, second) = when (myString.contains("-")) {
true -> myString.split('-', limit = 2)
else -> listOf("Default1", "Default2")
}
为什么会这样
两个分支都返回 List<String>
你可以把整个块当作一个对待 List<String>
,因此它可以被解构以从中获取值。
可能的清理
val myString = "firstPart-secondPart"
val (first, second) = when {
myString.contains("-") -> myString.split('-', limit = 2)
else -> listOf("Default1", "Default2")
}
假设您要添加更多条件,这可能更有意义,否则可能更有意义。
作为良好和正确答案的替代 jrtapsell,你可以使用destructured Pair
小号:
val (first, second) = when (myString.contains("-")) {
true -> myString.split('-', limit = 2).let { it[0] to it[1] }
else -> "Default1" to "Default2"
}
注1:带有两个元素的结果列表转换为a Pair
在...的帮助下 let
。
注2: 中缀功能 to
用来创造 Pair
在这里。