Kotlin Lambda参数应从括号中移出
IntelliJ提出以下投诉: Lambda参数应从括号中移出Kotlin Lambda参数应从括号中移出,kotlin,Kotlin,IntelliJ提出以下投诉: Lambda参数应从括号中移出 val profile=loadProfiles() profile.sortedWith(比较器({profile1,profile2-> 如果(profile1.age>profile2.age)return@Comparator1. if(profile1.age 如果(profile1.age>profile2.age)return@Comparator1. if(profile1.age 如果(profile1.age>p
val profile=loadProfiles()
profile.sortedWith(比较器({profile1,profile2->
如果(profile1.age>profile2.age)return@Comparator1.
if(profile1.age
我应该如何设置上述格式以消除投诉?此外,排序代码不会排序。是什么导致了问题
sortedWith():返回根据排序规则排序的所有元素的列表
指定[比较器]
因此,要对profile
列表进行排序,您必须将sortedWith()
返回的列表分配给profile
(同时将其声明从val
更改为var
)
var profile=loadProfiles()
profile=profile.sortedWith(比较器{profile1,profile2->
如果(profile1.age>profile2.age)return@Comparator1.
if(profile1.age
或
val profile=loadProfiles().sortedWith(比较器{profile1,profile2->
如果(profile1.age>profile2.age)return@Comparator1.
if(profile1.age
警告:按Alt+Enter并让InteliJ进行更改。此警告是因为Kotlin lambda中的参数可以(实际上应该)在括号外 见此:
fun onClick(action: () -> Unit) { ... }
当您使用这样的函数时,您可以使用:
view.onClick({ toast(it.toString())} )
view.onClick() { toast(it.toString()) }
view.onClick { toast(it.toString()) }
所有这些表单都是正确的(编译器不会失败),但在《Kotlin样式指南》中,您会发现以下语句:
profile.sortedWith(Comparator { profile1, profile2 ->
if (profile1.age > profile2.age) 1
else if (profile1.age < profile2.age) -1
else 0
})
如果一个调用占用一个lambda,则应将其传递到
尽可能使用括号
@看
这就是IntelliJ显示警告的原因。您可以按Alt+Enter,IntelliJ应该显示正确的解决方案,或者只是将lambda移出括号。若lambda是唯一的参数,那个么也去掉括号
什么时候lambda必须在括号中?仅当它不是函数中的最后一个参数时。至于您眼前的问题,您只需这样编写:
profile.sortedWith(Comparator { profile1, profile2 ->
if (profile1.age > profile2.age) return@Comparator 1
if (profile1.age < profile2.age) return@Comparator -1
return@Comparator 0
}
)
,而不是在else时使用级联:
profile.sortedWith(Comparator { profile1, profile2 ->
when {
profile1.age > profile2.age -> 1
profile1.age < profile2.age -> -1
else -> 0
}
})
compareBy
:
profile.sortedWith(compareBy(Profile::age))
profile.sortedBy(Profile::age)
profile.sortedWith(compareBy(Profile::age))
profile.sortedBy(Profile::age)
您可能还对{it.age}profile.sortedBy{it.age}感兴趣。。。还要注意的是,它不是对基础列表进行排序,而是返回一个新的排序列表。。。。我的意思是:
Alt
+Enter
或者点击灯泡让Intellij帮你解决这个问题……或者更好(我认为).sortedBy{it.age}
profile.sortedWith(compareBy(Profile::age))
profile.sortedBy(Profile::age)