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
}