Android 如何在kotlin中为takeIf添加else条件?
我知道这是为了检查Android 如何在kotlin中为takeIf添加else条件?,android,kotlin,Android,Kotlin,我知道这是为了检查 if(storesList!=null && storesList.isNotEmpty()){ // do this } else { //else do this } 我们可以这样写 storesList?.takeIf { it.isNotEmpty() }.apply {//do this } 我怎样才能在这上面添加一个else条件,我不接受take,除非你可以添加一个Elvis操作符 storesList?.t
if(storesList!=null && storesList.isNotEmpty()){
// do this
} else {
//else do this
}
我们可以这样写
storesList?.takeIf { it.isNotEmpty() }.apply {//do this
}
我怎样才能在这上面添加一个else条件,我不接受
take,除非你可以添加一个Elvis操作符
storesList?.takeIf { it.isNotEmpty() }?.apply {
//it.isNotEmpty() is true
} ?: //it.isNotEmpty() is false
因此,如果it.isNotEmpty()
为true,takeIf
返回一个非空值,将调用apply块
如果为false,则表达式为null,elvis运算符将执行其后面的表达式。elvis运算符有点像elvis运算符后面的执行语句
有关更多信息,请查看以下文档:
使用Elvis运算符
a?:b//如果a不是空值,则此处的值=a else值=
b
就你而言—
storesList?.takeIf { it.isNotEmpty() }?.apply {
//it.isNotEmpty() is true
} ?: run{} //`else condition goes here`
要在此处查看更多信息-以Kotlin的方式,您可以使用安全调用操作符(“?”)在可空对象上执行操作,而不会崩溃,甚至在if(obj!=null)
块中执行操作
所以,像
if (someObj != null )
someObj.someOperation() //just doing some operation
调用类似于:someObj?.someOperation()
的函数也是一样的
所以,如果您想检查列表的空性而不使用if-else条件,您可以使用下面的方法(您已经这样做了)
但是这里的其他条件呢
为此,您可以使用elvis操作符来满足条件。此运算符所做的是,若操作的左侧为null或不满足特定条件,则取操作数的右侧
因此,最终代码应该如下所示:
storesList?.takeIf { it.isNotEmpty() }?.apply {
// Provides you list if not empty
} ?: run {
// Else condition here
}
说明:如果storesList
为空或空则转到elvis后面的else部分,否则转到apply block@Raghunandan,您能否发布一个答案,无法确定您要将else条件置于何处?在takeIf块内部还是在该操作之后?@JeelVankhede我想将旧的if-else转换为新的kotlin类型takeIf
,我已经在上面发布了我的条件://else条件在这里当我在这里添加大括号时,我得到了不匹配的单位/boolean你可以在那里放置run{}
块。空合并运算符()在Kotlin中是?:
,而不是。
。我无法在?:之后添加大括号,这会导致单元/布尔值不匹配。这是唯一的缺点。。你必须把它包装成一个函数。。。
storesList?.takeIf { it.isNotEmpty() }?.apply {
// Provides you list if not empty
} ?: run {
// Else condition here
}