Kotlin中filter()和{}有什么区别

问题描述 投票:0回答:1

我正在研究Kotlin,在理解带括号的滤镜和花括号之间的区别时遇到了一些困难。如果我检查过滤器的实现,Intellij会将我重定向到相同的源。

代码示例:

listOf("john", "dave").filter { name -> name.startsWith("j") }

// versus

// simple predicate function
fun getSimplePredicate(): (String) -> Boolean = 
  name: String -> name.firstName.startsWith(prefix)

// actual filter call
listOf("john", "dave).filter(getSimplePredicate())

如果我想打电话给filter { getSimplePredicate() }怎么办?

有办法吗?有什么区别?在此先感谢

kotlin lambda filter predicate
1个回答
0
投票
[在Kotlin中,如果函数的最后一个参数(此处为过滤器)是函数(谓词),则可以传递lambda,并且lambda可以在括号之外。所以

.filter { ... }

与]相同>

.filter({ ... })

因此,在您的代码中,{ name -> name.startsWith("j") }是一个lambda,它是传递给filter()的参数。

函数getSimplePredicate() 

返回

谓词函数。

因此.filter(getSimplePredicate())等效于.filter({ name.firstName.startsWith(prefix) }),等效于.filter { name.firstName.startsWith(prefix) }

如果.filter { getSimplePredicate() }是一个返回布尔值的函数,即{ getSimplePredicate() }返回一个布尔值,则getSimplePredicate()将是有效的。但这不是,因此无效。
© www.soinside.com 2019 - 2024. All rights reserved.